.off(),. undelegate(),. unbind()事件仅来自复制的元素

时间:2014-06-30 13:54:55

标签: javascript jquery

我正在使用

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:1)

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

上面的代码意味着,"将单击处理程序附加到文档,因此每当任何元素对应于' .mySelector'单击选择器,触发处理程序"。

每当你克隆一个元素时,你也会克隆它的类,因此它适合' .mySelector'太

您委派的处理程序附加到文档而不是elmenets本身。为了使新元素不触发处理程序,必须使它们不适合选择器。所以要么将他们的班级改为' .mySelector2'克隆后,或其他什么。