2012-12-20 78 views
2

比方说,我有这样的事情:关闭特定项目事件选择

$('#mydiv').on('click', 'button', doSomething); 

显然我要上点击所有按钮doSomething()。现在让我们说,我希望这些按钮之一不这样做,但做一些其他的事情。

$('#mydiv').off('click', '.specialclass button'); 

这不起作用,但我需要它。有没有办法做到这一点?我非常希望不必单独连接每个按钮。

.off() documentation的这部分就是杀了我:

删除特定的委派事件处理程序,提供了一个选择的说法。当附加事件处理程序时,选择器字符串必须与传递给.on()的字符串完全匹配。

Here's a fiddle演示我正在尝试做什么。

回答

4

您可以使用jQuery伪选择器:not()排除搜索结果,它是文档here

$('#mydiv').on('click', 'button:not(.specialclass)', doSomething); 

然后你可以只指定特定的情况下seperatly:

$('.specialclass').on('click', function() { console.log('sup'; }); 

你也可以使用解除绑定关闭事件的jQuery。

$('div').unbind('click');​ 

虽然未过时,根据该文档:

在jQuery 1.7中,。对()和.off()方法是优选的附加和上元件

移除事件处理程序的
+0

这没问题,但假设初始设置在模块中,'.off'将在另一个模块中。第一个模块不知道在第二个模块中将会出现什么类 – Jason

+0

@Jason看到更新后的响应 –

+0

这两个解决方案都不是[工作](http://jsfiddle.net/edelman/Mu67B/),不幸的是。 – Jason