我正在使用
$(document).on('click', '.mySelector', function () {
//do something
});
将事件委派给按钮。
接下来,我使用.clone(true)
复制div
,其中包含几个按钮并委托给它的事件。
我的问题是如何从选定的新创建按钮中删除事件?
我试过了:
$(document).unbind('click', $(myNewDiv).find('.mySelector'));
不知何故,它正在从整个文档中的所有$('.mySelector')
中删除事件,而不仅仅是来自“myNewDiv”对象内部的事件。
我见过jQuery .off()
和.undelegate()
的文档,他们只接受字符串之类的选择器(我的div不能有任何唯一的ID)。
是否有任何选项可以在委托给文档时从jQuery对象中的选定元素中删除事件?
答案 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'克隆后,或其他什么。