12 html javascript events onclick
我在onclick事件中有两个问题,它们有点类似,所以我会在这里问他们.
第一:
我在div中有一个复选框.输入具有onchange功能,div具有onclick功能.
<div onclick="doSomething()">
<input type="checkbox" onchange="doSomethingElse()" />
</div>
Run Code Online (Sandbox Code Playgroud)
问题是当我选中/取消选中doSomething()和doSomethingElse()时复选框.有关如何阻止这种情况发生的任何想法?我尝试过onchange ="doSomethingElse(event)"和doSomethingElse(e)函数我有e.stopPropagation(); 这没用.
第二:
我在div中有一个图像.div具有onclick功能,但图像没有.故意,图像比div大,并溢出div.
-----------------------
| image |
| --------------- |
| | div | |
| | | |
| --------------- |
| |
-----------------------
Run Code Online (Sandbox Code Playgroud)
如果用户在div框的边界内单击,我只希望触发onclick.但是,如果你点击溢出到div外部的图像的一部分,onclick事件也会触发...任何想法?
第一个问题对我来说比第二个问题更重要.但如果有人能够回答这两个问题那就太棒了!
先谢谢你的帮助,
马特
对于你的第一个问题:IE不支持stopPropagation(),你应该使用e.cancelBubble = true.只需先进行功能检查,找出应该使用哪种方法(if (e.stopPropagation) {code}).
对于你的第二个问题:可能包括处理click事件的第二个div?
<div><img src="image.jpg"/></div>
<div style="position:absolute" onclick="doSomething();"></div>
Run Code Online (Sandbox Code Playgroud)
然后正确定位第二个div
对于第二个问题,您可以在发生单击事件时获取指针的坐标,并将它们与div的坐标进行比较.(实际实现取决于您使用的js库)
对于你的第一个问题,要阻止事件冒泡,你必须使用
event.cancelBubble = true;
if(event.stopPropagation) event.stopPropagation();
Run Code Online (Sandbox Code Playgroud)