Javascript 一旦jquery事件传递给函数,console.log($(this));不再打印jquery对象
当我在一些div上附加一个click偶数时,我可以在Chrome控制台中打印出Javascript 一旦jquery事件传递给函数,console.log($(this));不再打印jquery对象,javascript,jquery,jsbin,Javascript,Jquery,Jsbin,当我在一些div上附加一个click偶数时,我可以在Chrome控制台中打印出$(this),并在那里显示jquery对象 但是,我尝试只获取被单击的最顶端的dom节点。所以我想在函数中使用stopPropagation() $(document).ready(function(){ $('body').on('click', '*', function(){ console.log($(this)); }); }); 但每当我将事件传递到函数中时 $('body')。在(
$(this)
,并在那里显示jquery对象
但是,我尝试只获取被单击的最顶端的dom节点。所以我想在函数中使用stopPropagation()
$(document).ready(function(){
$('body').on('click', '*', function(){
console.log($(this));
});
});
但每当我将事件传递到函数中时
$('body')。在('click','*',函数(事件){
我将$(此)
作为[object object]
打印到控制台。奇怪的是,当我随后从函数中删除事件和事件。stopPropagation()
时,控制台仍然打印[object object]
我只是试图注册对身体每个部分的点击,除非它发生在类为avoid
的div上,但我似乎没有掌握jquery事件及其对应的stopPropagation()
。$(这)
如何从我可以看到的jquery对象变为一个[object object]
何时传入事件
?如何使用它仅注册避免类中未发生的单击
$("body").on('click', '*' ...
每个元素的代表。我认为您只想这样做:
$("body").on('click', '.avoid', function (e) {
e.stopPropagation();
}).on('click', function () {
console.log('body clicked');
});
您走对了方向,只需将stopPropagation()
绑定到特定事件,如下所示:
$(document).ready(function(){
$('body').on('click', '*', function(e){
console.log($(this));
e.stopPropagation();
});
});
其中e
是事件对象。现在工作正常。下面是更新的jsbin:
我想他也想对点击的对象进行标识
$(document).ready(function(){
$('body > *').click(function(){
console.log( $(this) );
});
});
这确实是我想要做的,谢谢。把on()
s链接在一起的意义是什么?这是怎么工作的?@thomas:这和$('body')是一样的。on(…);$('body')。on(…);
(即调用。on
onbody
两次)。这是因为。
上的返回此
(指$('body')
)。此概念通过方法链接称为fluent interface:。请记住,如果确实希望传播,但希望隔离单击的元素以记录它,则会停止传播,例如如果(e.target==this){console.log($(this);}
@poplane谢谢你。应该首先this
是$(this)
吗?我似乎无法让它做任何事情。它似乎无法让它做任何事情,因为你可能还没有在函数()中添加e来使它成为函数(e)
对于调试对象,console.dir
有时更适合。