Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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 on()不';克隆元素不起作用_Javascript_Jquery - Fatal编程技术网

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();
    });
}