首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript cloneNode()无法正常工作

javascript cloneNode()无法正常工作
EN

Stack Overflow用户
提问于 2020-03-10 16:06:38
回答 1查看 89关注 0票数 0

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

代码语言:javascript
复制
$("#a").on("change",f);

它可以工作,这意味着每次我在下拉列表中更改所选值时,函数f()都会被调用。

我想在页面中的另一个地方克隆这个选择。我有这样的代码:

代码语言:javascript
复制
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元素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-10 16:10:22

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

代码语言:javascript
复制
$(container).append(newSelect);
$("#b").on("change",f);

其中,container是要附加新<select>的元素。

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

代码语言:javascript
复制
var newSelect=oldSelect.clone(true);
newSelect
  .prop('id', 'b')
  .on("change",f)
  .appendTo(container);

(请注意,在上面的代码中,newSelect是一个jQuery集合,而不是一个HTMLSelectElement。)

代码语言:javascript
复制
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');
代码语言:javascript
复制
<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>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60613582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档