Gre*_*g B 2 jquery event-bubbling preventdefault stoppropagation
从事件处理程序返回 false 将自动调用 event.stopPropagation() 和 event.preventDefault()。false 值也可以作为 function(){ return false; 的简写传递给处理程序。}. 所以, $("a.disabled").on("click", false); 将事件处理程序附加到所有具有“禁用”类的链接,以防止在单击它们时跟踪它们,并阻止事件冒泡。
所以当我创建一个点击事件时:
$('#sidebar').on("click", ".toggle", function() {
$(this).parents("p").next("ul").toggle(400);
return false;
});
Run Code Online (Sandbox Code Playgroud)
我希望点击不会注册,因为它没有机会传播.toggle到#sidebar
我想出的唯一解释是,如果允许这种情况发生,它会使该on()功能变得毫无意义,所以在这种情况下它可能会被绕过?
on()就冒泡而言,遵循什么规则?
实际上,处理程序附加到 element #sidebar,而不是附加到.toggle元素。
所以当你点击一个内部元素时,事件会冒泡直到它到达`#sidebar',然后只有处理程序被执行。在处理程序中返回 false,然后将停止进一步向上传播。
.on()的文档通过一个例子提到了这一点:
除了它们能够处理尚未创建的后代元素上的事件之外,委托事件的另一个优点是当必须监视许多元素时,它们的潜在开销要低得多。在其 tbody 中有 1,000 行的数据表上,此示例将处理程序附加到 1,000 个元素:
$("#dataTable tbody tr").on("click", function(event){
alert($(this).text());
});
Run Code Online (Sandbox Code Playgroud)
委托事件方法仅将事件处理程序附加到一个元素,即 tbody,并且该事件只需要向上一层(从单击的 tr 到 tbody):
$("#dataTable tbody").on("click", "tr", function(event){
alert($(this).text());
});
Run Code Online (Sandbox Code Playgroud)