JavaScript 事件冒泡
我有这样的设置
<div onclick="SomeEvent"> <input type=checkbox value=1>1 <input type=checkbox value=2>2 <input type=checkbox value=3>3 </div>
当用户单击复选框时出现问题我不希望触发 SomeEvent。
在某些情况下我确实有这条线
“event.stopPropagation();”
但这似乎根本没有任何作用。
I have this setup
<div onclick="SomeEvent"> <input type=checkbox value=1>1 <input type=checkbox value=2>2 <input type=checkbox value=3>3 </div>
The problem when the user click on the checkboxes I don't want the SomeEvent fired.
In the some event I do have the line
"event.stopPropagation();"
but that seems to do nothing at all.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在事件冒泡模型中,事件传播是从内部元素到外部元素。
这意味着 event.stopPropagation(); 应该位于输入的事件中,而不是 div 中。
现在是 Javascript 代码:
更多信息:http://www.quirksmode.org/js/events_order。 html
编辑:上面是展示冒泡模型如何工作的快速方法,但使用 JQuery 解决此问题的更好答案是:
现在是 Javascript 代码:
In the event bubbling model, the event propagation is from the inner elements to the outer elements.
This means that the event.stopPropagation(); should be in the inputs' events instead of the div.
Now the Javascript code:
More info: http://www.quirksmode.org/js/events_order.html
EDIT: The above was a quick way to show how the bubbling model works, but a better answer to solve this problem using JQuery would be:
Now the Javascript code:
将内联 onclick 更改为:
然后在
SomeEvent
中,执行以下操作:这只会在您单击
div
元素本身(而不是后代)时触发代码。如果有其他后代应该触发处理程序,则执行以下操作:
这将为除复选框之外的任何单击触发处理程序。
Change the inline onclick to this:
Then in
SomeEvent
, do this:This will only fire the code when you click on the
div
element itself, instead of a descendant.If there are other descendants that should fire the handler, then do this:
This will fire the handler for any click except those on the checkboxes.