javascript cloneNode() 无法正常工作
javascript cloneNode() doesn't work properly
我在 html 页面中有一个带有 id="a" 的 select 元素(例如)。
我有一个名为 f() 的函数。
当我写
$("#a").on("change",f);
有效,这意味着每次我更改下拉列表中的 selected 值时,都会调用函数 f()。
我想将这个 select 克隆到页面的另一个地方。
我有这个代码:
var oldSelect=$("#a")
var newSelect=oldSelect[0].cloneNode(true);
newSelect.id="b";
$("#b").on("change",f);
当我更改新下拉列表中的 selected 值时,函数 f() 未被调用。
我尝试使用 chrome 的 devTools 调试它,它似乎 $("#a") 是一种长度为 1 的数组,它首先具有 select 本身.但是 $("#b") 没有包含 select 本身的“0”属性。
有谁知道为什么会这样?如何克隆 select 元素及其所有选项和回调?
虽然您克隆了现有的 #a
,但您还没有将它插入文档中的代码中,因此 $("#b")
不会给您 [=35] 中的任何元素=].在使用 $
选择它之前插入它,例如:
$(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>
我在 html 页面中有一个带有 id="a" 的 select 元素(例如)。 我有一个名为 f() 的函数。 当我写
$("#a").on("change",f);
有效,这意味着每次我更改下拉列表中的 selected 值时,都会调用函数 f()。
我想将这个 select 克隆到页面的另一个地方。 我有这个代码:
var oldSelect=$("#a")
var newSelect=oldSelect[0].cloneNode(true);
newSelect.id="b";
$("#b").on("change",f);
当我更改新下拉列表中的 selected 值时,函数 f() 未被调用。
我尝试使用 chrome 的 devTools 调试它,它似乎 $("#a") 是一种长度为 1 的数组,它首先具有 select 本身.但是 $("#b") 没有包含 select 本身的“0”属性。
有谁知道为什么会这样?如何克隆 select 元素及其所有选项和回调?
虽然您克隆了现有的 #a
,但您还没有将它插入文档中的代码中,因此 $("#b")
不会给您 [=35] 中的任何元素=].在使用 $
选择它之前插入它,例如:
$(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>