一旦jquery事件传递给function,console.log($(this));不再打印jquery对象

时间:2013-01-31 00:41:32

标签: javascript jquery jsbin

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

console screenshot 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]。同样奇怪的是,当我随后从函数中删除eventevent.stopPropagation()时,控制台仍会打印[object Object]

我只是试图在身体的每个部分上注册一个点击,除非它出现在具有类avoid的div上,但我似乎没有抓住jquery event及其对应物stopPropagation()。当$(this)传入时,[object Object]如何从我可以看到的jquery对象变为event?如何使用它来仅记录我的avoid类中未发生的点击?

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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