Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript cloneNode()不';我不能正常工作_Javascript_Jquery_Html_Clonenode_Jquery Clone - Fatal编程技术网

javascript cloneNode()不';我不能正常工作

javascript cloneNode()不';我不能正常工作,javascript,jquery,html,clonenode,jquery-clone,Javascript,Jquery,Html,Clonenode,Jquery Clone,我在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); 当

我在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,它首先有select本身。但是$(“#b”)没有包含select本身的“0”属性


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

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

$(container).append(newSelect);
$("#b").on("change",f);
其中,
容器
是要将新的
附加到的元素

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

var newSelect=oldSelect.clone(true);
newSelect
  .prop('id', 'b')
  .on("change",f)
  .appendTo(container);
(注意,在上面,
newSelect
是一个jQuery集合,而不是一个htmlselect元素。)

const f=()=>console.log('change');
var oldSelect=$(“#a”);
oldSelect.on(“更改”,f);
var newSelect=oldSelect.clone(true);
新闻选择
.prop('id','b'))
.on(“更改”,f)
.appendTo(“#container”)

方案A
方案B

虽然您克隆了现有的
#a
,但还没有将其插入到文档中显示的代码中,因此
$(“#b”)
不会返回任何元素。在使用
$
选择它之前插入它,例如:

$(container).append(newSelect);
$("#b").on("change",f);
其中,
容器
是要将新的
附加到的元素

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

var newSelect=oldSelect.clone(true);
newSelect
  .prop('id', 'b')
  .on("change",f)
  .appendTo(container);
(注意,在上面,
newSelect
是一个jQuery集合,而不是一个htmlselect元素。)

const f=()=>console.log('change');
var oldSelect=$(“#a”);
oldSelect.on(“更改”,f);
var newSelect=oldSelect.clone(true);
新闻选择
.prop('id','b'))
.on(“更改”,f)
.appendTo(“#container”)

方案A
方案B

你能试试这个吗
var newSelect=$(“#a”).clone(true)var newSelect=$(“#a”).clone(true)如果我没有容器的id该怎么办?这是一个td(在一个表中),我想把select放在里面。表中的行是动态添加的,所以我不想给它们一个ID。您不需要ID,只需要选择要附加到的父级。任何有效的CSS选择器都可以,元素或jQuery集合中对
的引用也可以。谢谢!在将其插入文档后移动on()的建议有效!!如果我没有容器的id怎么办?这是一个td(在一个表中),我想把select放在里面。表中的行是动态添加的,所以我不想给它们一个ID。您不需要ID,只需要选择要附加到的父级。任何有效的CSS选择器都可以,元素或jQuery集合中对
的引用也可以。谢谢!在将其插入文档后移动on()的建议有效!!