jQuery not()。bind('click');不起作用

时间:2011-10-08 21:17:01

标签: jquery

jQuery('div').not("#supcont").bind('click', function() {
    jQuery("#supcont").slideUp("slow");
});

在:

jQuery("#supcont").click();

不排除#supcont之类的行为。为什么呢?

3 个答案:

答案 0 :(得分:4)

should work fine。我认为可能没有的唯一原因是,#supcont元素是div的后代,并且当点击事件冒出时,div会收到它。为防止发生这种情况,您可以使用事件对象的stopPropagation方法:

jQuery('div').not("#supcont").bind('click', function(e) {
    e.stopPropagation();
    jQuery("#supcont").slideUp("slow");
});

更新(见评论)

实际上,如果#supcont是另一个div的后代,上述内容对您无效,您需要在#supcont上捕获该事件并将其停在那里。因此,将click事件处理程序绑定到#supcont

jQuery("#supcont").click(function(e) {
    e.stopPropagation();
});

答案 1 :(得分:3)

您应该在整个<div>上添加单个事件处理程序,而不是向页面上的每个document标记添加事件。您应该检查使用事件委派和“冒泡”的方法。

答案 2 :(得分:1)

另一种写这个的方法是:

$('div').click(function() {
    if(!$(this).is('#supcont'))
        $('#supcont').slideUp("slow");
});

$('#supcont').click()