【问题标题】:How to exclude (.not) selector with Jquery (with live function)如何使用 Jquery 排除(.not)选择器(具有实时功能)
【发布时间】:2011-03-18 02:43:15
【问题描述】:

我在页面上的所有链接或多个选择器上有一个实时事件,我有多个选择器我不想激活该事件。通常,当在所有链接上执行第一个实时函数时,会激活 e.preventDefault()。但如果其中一个选择器在我的排除列表中,我想正常执行链接。我试过这段代码:

$(selectorListA).live('click',function(e) {
    // stop all event
});

$(selectorListB).live('click',function(e) {
    e.preventDefault();
    // do action
});

我已经试过了:

$(selectorListA).not(selectorListB).live('click',function(e) {
    e.preventDefault();
    // do action
});

所有这些解决方案都不起作用,我唯一的方法就是这段代码,它可以工作,但在 chrome 中,在单击事件执行之前会显示一个错误,嗯,我不确定是否好:

$(selectorListB).live('click',function(e) {
    die();
});

$(selectorListA).live('click',function(e) {
    e.preventDefault();
    // do action
});

我不知道我可以采取什么来执行所有 selectorListA 并排除所有 selectorListB。能帮帮我吗,谢谢!

【问题讨论】:

  • die() 我认为唯一可行的原因是die 未定义。

标签: jquery click live


【解决方案1】:

您在 Chrome 中遇到的错误是什么?似乎问题不在于您的选择器。

无论如何,这样的事情应该可以工作:

$(selectorListA).live('click',function(e) {
    if ($(this).is(selectorListB)) }{
        // stuff for b group only
    }

    // stuff for both groups
});

使用.not() 的版本将不起作用,因为live 附加了一个文档级处理程序并使用原始选择器来测试是否应该应用该事件。因此,在调用 live 之前实际选择和过滤不会像 click() 那样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2016-09-05
    相关资源
    最近更新 更多