Javascript jQuery';on()';命令
所以,我想知道为什么这个代码不能正常工作,我能做些什么来防止这种行为:Javascript jQuery';on()';命令,javascript,jquery,events,propagation,Javascript,Jquery,Events,Propagation,所以,我想知道为什么这个代码不能正常工作,我能做些什么来防止这种行为: 如果我需要防止父对象的事件传播,而特定的子对象被单击,我使用了方法1,但它似乎不起作用,但方法2却可以正常工作 //方法1 $(文件)({ 点击:功能(e){ console.log('clicked!'); e、 预防默认值(); 返回false; } }“.hax”); //方法2 /*$('.hax')。在('click',函数(e)上{ e、 预防默认值(); 返回false; });*/ //取消注释将阻止事件传
如果我需要防止父对象的事件传播,而特定的子对象被单击,我使用了
方法1
,但它似乎不起作用,但方法2
却可以正常工作
//方法1
$(文件)({
点击:功能(e){
console.log('clicked!');
e、 预防默认值();
返回false;
}
}“.hax”);
//方法2
/*$('.hax')。在('click',函数(e)上{
e、 预防默认值();
返回false;
});*/
//取消注释将阻止事件传播
.hax{
背景色:白烟;
光标:指针;
}
哈克斯!
方法1使用事件委派,因此在该方法中,事件不直接与元素绑定,而是与父元素绑定,因此在您的情况下,父元素是文档。在这种情况下,无论为该特定元素触发什么事件,都将从DOM树中跟踪该事件,并在事件发生之前执行父调用。在您的情况下,它将首先从父级调用警报
在方法2中,事件直接与元素绑定,父事件仍将被激发,除非您在处理程序中阻止,但由于处理程序绑定到目标,您将不会面临任何其他操作(在您的情况下发出警报)
更好地了解
方法1使用事件委派,因此在该方法中,事件不直接与元素绑定,而是与父元素绑定,因此在您的情况下,父元素是文档。在这种情况下,无论为该特定元素触发什么事件,都将从DOM树中跟踪该事件,并在事件发生之前执行父调用。在您的情况下,它将首先从父级调用警报
在方法2中,事件直接与元素绑定,父事件仍将被激发,除非您在处理程序中阻止,但由于处理程序绑定到目标,您将不会面临任何其他操作(在您的情况下发出警报)
更好地了解
您正在通过方法1创建,也可以通过以下方式创建:
$(document).on('click', '.hax', function (e) {
console.log('clicked!');
e.preventDefault();
return false;
});
简要说明活动授权:
了解事件如何传播是能够利用事件委派的一个重要因素。每当单击我们的一个锚定标记时,就会为该锚定触发一个单击事件,然后弹出DOM树(一直到DOM顶部),触发其每个父级的单击事件处理程序
这并不意味着使用此方法无法实现您的目标,但为了使其正常工作,您可以为div.hax
创建一个中间父级,它是div.wrapper
的后代。我的意思是:
<div class='wrapper' onclick='alert("hello")'>
<div id="stopHere">
<div class='hax'>hax!</div>
</div>
</div>
您正在通过方法1创建,也可以通过以下方式创建:
$(document).on('click', '.hax', function (e) {
console.log('clicked!');
e.preventDefault();
return false;
});
简要说明活动授权:
了解事件如何传播是能够利用事件委派的一个重要因素。每当单击我们的一个锚定标记时,就会为该锚定触发一个单击事件,然后弹出DOM树(一直到DOM顶部),触发其每个父级的单击事件处理程序
这并不意味着使用此方法无法实现您的目标,但为了使其正常工作,您可以为div.hax
创建一个中间父级,它是div.wrapper
的后代。我的意思是:
<div class='wrapper' onclick='alert("hello")'>
<div id="stopHere">
<div class='hax'>hax!</div>
</div>
</div>
除此之外,您还可以学习中的“附加注释”部分。除此之外,您还可以学习中的“附加注释”部分。为什么在第1部分中使用onclick为什么在第1部分中使用onclick谢谢您的回答,现在我明白了。不过,对我来说,这个解决方案有点过于工程化了。尽管如此,我还是非常感谢您的参与=)
谢谢您的回答,现在我明白了。不过,对我来说,这个解决方案有点过于工程化了。尽管如此,我还是非常感谢您的参与=)