我有一些代码正在使用jquery的委托方法。
e.g:
$(document).delegate('.forImg','dblclick',function(event){.
.
.
.
}
我有多个具有相同类但不同ID(唯一)的元素。我的应用程序要求我停止某个元素的事件。如果我使用与undelegate的委托相同的语法,则会删除该类的所有元素的事件。例如
$(document).undelegate('.forImg','dblclick');
但实际上我只想删除具有特定id的特定元素的事件。我尝试了很多组合,其中我将选择器作为id。但是没有影响,元素仍然继续响应该事件。
我已经读过,为检查选择器的文档创建了一个处理程序。我想这就是为什么即使我要求它取消操作处理程序继续执行。
如何在不必为每个元素提供委托的情况下执行此操作? 这就是给出课程的原因。但我需要控制每个元素事件。
欢迎任何帮助/建议。
谢谢
答案 0 :(得分:3)
好吧,毕竟我想到了什么......
所以,你已经委派了一个监听器。双击任何所选元素,将执行一个函数,对吗?
但是如果你将另一个双击侦听器绑在它上面并停止传播,它将不再起泡:
$('#SOMEID').bind('dblclick', function(e) {
e.preventDefault();
e.stopImmediatePropagation();
});
小提琴:http://jsfiddle.net/p5e2e/7/
注意:我正在使用'bind',因为OP似乎是因为任何原因使用旧语法(并非所有人都使用jQuery 1.7+),但如果使用最新的jQuery,则交换on
到位bind
。
答案 1 :(得分:2)
当您第一次使用not()排除一个ID并使用单独的调用委托给该ID时委派处理程序,以便您可以独立于类处理程序删除
$(document).delegate('.forImg:not(#SOMEID)','dblclick',function(event)......
$(document).delegate('#SOMEID','dblclick',function(event)......
答案 2 :(得分:0)
您不能仅使用.undelegate()中的.unbind()
这样的命名空间。因此,您应该使用标记名称以及类名称div.forImg
。
答案 3 :(得分:0)
您应该使用.on() method。从jQuery 1.7开始,.delegate()已被.on()取代。通常,这些是两种方法的等效模板:
$(document).delegate('.forImg:not(#SOMEID)','dblclick',function(event)); // jQuery 1.4.3+
$(document).on('.forImg:not(#SOMEID)','dblclick',function(event)); // jQuery 1.7+`
你需要知道id 。如果您的内容是动态的&你正在使用PHP然后你可以使用:
<div class='something' id='<?php echo "dynamic".$i;?>' >
而 $ i 在循环内增加(MySQL等等......)。