gpt4 book ai didi

javascript cloneNode() 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 00:02:44 24 4
gpt4 key购买 nike

我在 html 页面中有一个 id="a"的 select 元素(例如)。我有一个名为 f() 的函数。当我写作时

$("#a").on("change",f);

它有效,这意味着每次我更改下拉列表中的选定值时,都会调用函数 f()。

我想将此选择克隆到页面中的其他位置。我有这个代码:

var oldSelect=$("#a")
var newSelect=oldSelect[0].cloneNode(true);
newSelect.id="b";
$("#b").on("change",f);

当我更改新下拉列表中的选定值时,不会调用函数 f()。

我尝试使用 chrome 的 devTools 对其进行调试,发现 $("#a") 是一种长度为 1 的数组,它首先具有选择本身。但是 $("#b") 没有包含选择本身的“0”属性。

有谁知道为什么会这样吗?如何克隆一个 select 元素及其所有选项和回调?

最佳答案

尽管您克隆了现有的 #a ,您尚未将其插入到您显示的代码中的文档中,因此 $("#b")不会给你任何元素作为返回。在使用 $ 选择之前插入它,例如:

$(container).append(newSelect);
$("#b").on("change",f);

哪里container是您要附加新的 <select> 的元素到。

或者直接将监听器添加到元素,而不是再次选择它:

var newSelect=oldSelect.clone(true);
newSelect
.prop('id', 'b')
.on("change",f)
.appendTo(container);

(请注意,上面的 newSelect 是 jQuery 集合,而不是 HTMLSelectElement。)

const f = () => console.log('change');

var oldSelect = $("#a");
oldSelect.on("change",f);

var newSelect = oldSelect.clone(true);
newSelect
.prop('id', 'b')
.on("change", f)
.appendTo('#container');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
<select id="a">
<option>Option A</option>
<option>Option B</option>
</select>
</div>

关于javascript cloneNode() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60613582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com