Javascript on()不';克隆元素不起作用
似乎Javascript on()不';克隆元素不起作用,javascript,jquery,Javascript,Jquery,似乎.on()无法从clone()绑定新创建的元素 添加 $(“.remove”)。在(“单击”,函数(){ $(this.remove(); }); $(“.add”)。在(“单击”,函数(){ $(this.clone().toggleClass(“add remove”).text(“remove”).appendTo($(“.container”)); }); 为什么这不起作用 更新: 请注意,我知道.clone()需要两个参数,但我不想让克隆的元素继续注册到旧事件,但如果是新的,
.on()
无法从clone()
绑定新创建的元素
添加
$(“.remove”)。在(“单击”,函数(){
$(this.remove();
});
$(“.add”)。在(“单击”,函数(){
$(this.clone().toggleClass(“add remove”).text(“remove”).appendTo($(“.container”));
});
为什么这不起作用
更新:
请注意,我知道
.clone()
需要两个参数,但我不想让克隆的元素继续注册到旧事件,但如果是新的,我可以使用.off()
和.on()
再次注册,但我的问题是为什么之前声明的.on(“.remvove”)
未捕获克隆元素中的更改。因为需要将布尔参数传递给克隆
,以便将所有数据和事件处理程序附加到克隆元素
$(.remove”)。在(“单击”,函数(){
$(this.remove();
});
$(“.add”)。在(“单击”,函数(){
$(this).clone(true).toggleClass(“添加-删除”).text(“删除”).appendTo($(“.container”));
});代码>
添加
“我的问题是,为什么先前声明的.on(“.remvove”)没有捕获克隆元素中的更改。”
因为事件侦听器已附加到所有具有类名的元素。删除在该时间点存在于DOM中的类名
但通过克隆,您创建了一个新元素。它刚刚创建。新节点。你以前的听众如何处理这个问题
解决方案:
1.)使用事件委派并将侦听器附加到静态祖先节点
2.)在调用克隆函数时传递布尔标志,以便侦听器也被复制。
3.)在该节点上再次注册事件侦听器。取消绑定并绑定该函数
bindEvent();
function bindEvent(){
$(".remove").unbind("click");
$(".remove").bind("click",function() {
$(this).remove();
bindEvent();
});
$(".add").unbind("click");
$(".add").bind("click", function() {
$(this).clone().toggleClass("add remove").text("remove").appendTo($("body"));
bindEvent();
});
}
我不这么认为,我想将一个新事件绑定到克隆元素,为什么会有这么多下意识的向上投票?@Sawyer,如果您附加一个侦听器,并且如果添加与用于附加事件的选择器匹配的元素,它将不起作用,因为当附加侦听器时,没有任何因素present@Sawyer您可以使用代理instead@Sawyer更新了答案:)您知道您提供的$(this.clone().appendTo($(“body”))中有语法错误代码><代码>“
在正文后丢失!!下面是有效的代码:)
bindEvent();
function bindEvent(){
$(".remove").unbind("click");
$(".remove").bind("click",function() {
$(this).remove();
bindEvent();
});
$(".add").unbind("click");
$(".add").bind("click", function() {
$(this).clone().toggleClass("add remove").text("remove").appendTo($("body"));
bindEvent();
});
}