【问题标题】:Turn off events for specific item in selection关闭选择中特定项目的事件
【发布时间】:2012-12-20 01:32:54
【问题描述】:

假设我有这样的事情:

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

显然我希望所有按钮在点击时都指向doSomething()。现在假设我希望其中一个按钮不执行此操作,而是执行其他操作。

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

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

.off() documentation 的这一部分让我很生气:

要删除特定的委托事件处理程序,请提供选择器参数。选择器字符串必须与附加事件处理程序时传递给 .on() 的字符串完全匹配。

Here's a fiddle 演示我正在尝试做的事情。

【问题讨论】:

    标签: jquery event-delegation


    【解决方案1】:

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

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

    然后你可以单独指定具体情况:

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

    您还可以使用 unbind 来关闭 jQuery 中的事件。

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

    虽然没有被弃用,但根据文档:

    从 jQuery 1.7 开始,.on() 和 .off() 方法更适合在元素上附加和删除事件处理程序

    【讨论】:

    • 这没关系,但假设初始设置在一个模块中,而.off 将在另一个模块中。第一个模块不知道第二个模块中有哪些类
    • 不幸的是,这些解决方案都不是work
    • @Jason 是否有理由使用 div 而不是按钮来处理事件:jsfiddle.net/CuNYV
    • 是的,我将所有事件绑定到容器,因为它们是动态插入的
    • 这看起来太愚蠢了。为什么要这样做,如果我想关闭一个事件,我必须使用 EXACT 选择器来打开它?为什么不能拥有具有完全相同元素的等效选择器就足够了?呸呸呸
    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多