.off()、.undelete()和.unbind()事件仅来自复制的元素

.off(), .undelegate(), .unbind() event only from copied element

本文关键字:复制 元素 unbind undelete off 事件      更新时间:2023-09-26

我正在使用

$(document).on('click', '.mySelector', function () {
    //do something
});

将事件委派给按钮。接下来,我将使用.clone(true)来复制div,其中包含一些带有委派事件的按钮。我的问题是如何从选定的新建按钮中删除事件?我试过了:

$(document).unbind('click', $(myNewDiv).find('.mySelector'));

不知怎的,它正在从整个文档中的所有$('.mySelector')中删除事件,而不仅仅是从"myNewDiv"对象内部删除事件。

我看过jQuery .off().undelegate()的文档,它们只接受类似字符串的选择器(我的div不能有任何唯一的ID(。

当事件被委托给文档时,是否有任何选项可以从jQuery对象内的选定元素中删除事件?

您可以在克隆中添加一个类:

var $clone = $original.clone(true).addClass("clone");

并在您的委托处理程序中拒绝该类:

$(document).on("click", ".mySelector:not(.clone)", function() {
    // Do something...
});
$(document).on('click',  '.mySelector', function(){
   //do something
});

上面的代码意味着,"将一个单击处理程序附加到文档中,因此每当单击与".mySelector"选择器对应的任何元素时,都会激发该处理程序"。

无论何时克隆一个元素,都会克隆它的类,因此它也适合".mySelector"。

您委托的处理程序附在文档上,而不是elmenet本身。为了使新元素不激发处理程序,必须使它们不适合选择器。因此,要么在克隆后将它们的类更改为".mySelector2",要么其他什么。