我在页面上的所有链接或多个选择器上都有一个直播事件,我有多个选择器我不希望活动该事件。通常,当在所有链接上执行第一个实时函数时,将激活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中,在执行click事件之前显示错误,嗯,我不确定是不是很好:
$(selectorListB).live('click',function(e) {
die();
});
$(selectorListA).live('click',function(e) {
e.preventDefault();
// do action
});
我不知道我可以采取什么来执行所有selectorListA并排除所有selectorListB。能帮帮我吗,谢谢!
答案 0 :(得分:1)
Chrome中出现的错误是什么?似乎问题不在于您的选择器。
无论哪种方式,这样的事情应该有效:
$(selectorListA).live('click',function(e) {
if ($(this).is(selectorListB)) }{
// stuff for b group only
}
// stuff for both groups
});
使用.not()
的版本无效,因为live
附加了文档级处理程序并使用原始选择器来测试该事件是否应该应用。因此,在调用live之前实际选择和过滤将不会像click()
那样工作。