1

当我将点击附加到某些 div 时,我可以$(this)在 Chrome 控制台中打印出来,并在那里显示 jquery 对象。

控制台截图 http://jsbin.com/iyozap/1/edit

但是,我试图只获取被点击的最顶层 dom 节点。所以我想stopPropagation()在函数中使用

$(document).ready(function(){
  $('body').on('click', '*', function(){
    console.log($(this));
  });
});

但是每当我将事件传递给函数时 $('body').on('click', '*', function(event){

$(this)[object Object]. 奇怪的是,当我随后从函数中删除event和时event.stopPropagation(),控制台仍然打印[object Object].

我只是想在身体的每个部分注册一个点击,除非它发生在类的 div 上avoid,但我似乎没有掌握 jqueryevent及其对应部分stopPropagation()。如何$(this)从我可以在其中看到的 jquery 对象更改为传入的[object Object]时间eventavoid我怎样才能用它来只注册在我的班级中没有发生的点击?

4

3 回答 3

2
$("body").on('click', '*' ...

委托给每个元素。我想你只想这样做:

$("body").on('click', '.avoid', function (e) {
   e.stopPropagation();
}).on('click', function () {
   console.log('body clicked');
});

http://jsfiddle.net/ExplosionPIlls/YZcP7/

于 2013-01-31T00:45:52.713 回答
0

您在正确的轨道上,您只需要绑定stopPropagation()到特定事件,如下所示:

$(document).ready(function(){
  $('body').on('click', '*', function(e){
    console.log($(this));
    e.stopPropagation();
  });
});

e事件对象在哪里。现在工作正常。这是一个更新的 jsbin:http: //jsbin.com/iyozap/9/edit

于 2013-01-31T00:48:26.327 回答
0

我认为他也想对点击的对象进行识别

$(document).ready(function(){
  $('body > *').click(function(){
    console.log( $(this) );
  });
});
于 2013-01-31T00:49:53.287 回答