仅在单击元素时触发事件,而不在其子元素上触发事件
如果我将click
处理程序绑定到body
元素,当我单击页面上的任何内容时,将触发事件。 我可以在每次点击时查看event.target
:
$("body").on("click", function(event) { if (event.target.tagName == "BODY") { ... } });
但这似乎有点矫枉过正。 有没有办法只在单击身体的空白区域时触发事件?
您可以使用event的eventPhase
属性。 值为2
表示事件当前正在触发目标元素:
$("body").on("click", function(event) { //Cancel if not at target if (event.eventPhase != 2) return; //Other Code Here });
在这里小提琴: http : //jsfiddle.net/o0yptmmp/
如果单击的元素具有主体父级,则检查每次单击都可以执行此操作。 如果条件为false,则单击正文:
$("body").on("click", function(event) { if ($(this).parents('body').length == 0) { //Do something } });
在我看来,这不是一个好的做法,但它取决于你的代码和项目。
希望能帮助到你。
干杯。
你应该放一个
event.stopPropagation()
对所有孩子你想要不bubble
。