0

不知道我是否错误地使用了非选择器,但我希望点击的所有内容都可以做除了非选择器中的 id 之外的事情。

这些都不起作用,单击徽标时我会收到警报:

$('body').not('#logo').click(function(){ 
alert('hi');
});

$('body:not(#logo)').click(function(){ 
alert('hi');
});

和html:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Untitled Document</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type='text/javascript'>
    $(document).ready(function(){

    $('body').not('#logo').click(function(){ 
    alert('hi');
    });

    });
    </script>
    </head>

    <body>
    <div style='width:900px; margin:0 auto; background-color:red; height:600px;'>
    <div id='logo' style='background-color:black; width:200px; height:200px;'>
    </div>
    </div>
    </body>
    </html>
4

1 回答 1

3

@Alexander 对您的代码在做什么的描述是正确的。您正在匹配<body>没有idof 的元素logo。由于您只有一个 body 标签并且它没有 logo 的 id,因此您的选择器会选择您的 body 标签。

做你想做的事情的一种方法是将处理程序附加到正文,然后防止徽标上的事件冒泡。看起来像这样:

$('body').click(function(){ 
  alert('hi');
});

$("#logo").click(function(e){
    e.stopPropagation();
});

http://jsfiddle.net/jJyaA/1/

于 2013-02-01T21:30:13.977 回答