jquery undelegate不工作

时间:2012-03-03 07:10:39

标签: jquery events

我有一些代码正在使用jquery的委托方法。

e.g:

$(document).delegate('.forImg','dblclick',function(event){.
  .
  .
  .
}

我有多个具有相同类但不同ID(唯一)的元素。我的应用程序要求我停止某个元素的事件。如果我使用与undelegate的委托相同的语法,则会删除该类的所有元素的事件。例如

$(document).undelegate('.forImg','dblclick');

但实际上我只想删除具有特定id的特定元素的事件。我尝试了很多组合,其中我将选择器作为id。但是没有影响,元素仍然继续响应该事件。

我已经读过,为检查选择器的文档创建了一个处理程序。我想这就是为什么即使我要求它取消操作处理程序继续执行。

如何在不必为每个元素提供委托的情况下执行此操作? 这就是给出课程的原因。但我需要控制每个元素事件。

欢迎任何帮助/建议。

谢谢

4 个答案:

答案 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

演示:http://jsfiddle.net/p5e2e/

答案 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等等......)。