如何在子元素被点击时防止父元素的onclick事件触发?

12

我有两个onclick事件的问题,它们有些类似,所以我会在这里一起问。

第一个问题:

我在div中有一个复选框。输入框具有一个onchange函数,而div具有一个onclick函数。

<div onclick="doSomething()">
     <input type="checkbox" onchange="doSomethingElse()" />
</div>

当我勾选/取消复选框时,同时触发了doSomething()和doSomethingElse()。有什么想法可以防止这种情况发生吗?我尝试了在onchange="doSomethingElse(event)"中使用,并且在doSomethingElse(e)函数中加入e.stopPropagation();但这并没有起作用。

其次:

我有一个包含图片的div。该div具有onclick函数,但是图片没有。图片故意比div更大,超出了div的范围。

-----------------------
|        image        |
|   ---------------   |
|   |     div     |   |
|   |             |   |
|   ---------------   |
|                     |
-----------------------

我只希望当用户点击

框范围内的区域时才触发onclick事件。但是,如果你点击了溢出到
外部的图像的一部分,onclick事件也会触发... 有什么想法吗?

对我来说,第一个问题比第二个问题更重要。但如果有人能回答两个问题,那就太棒了!

非常感谢您的帮助,
Matt


请将其分为两个帖子。虽然您提出了两个“单击处理”问题,但主题并不能同时解决它们。 - Chadwick
11个回答

0

除了停止捕获冒泡之外,每个事件函数都应该有一些代码来检查是否已单击正确的元素,使用event.target或在IE中使用event.scrElement来查找所单击的元素。

针对您的第二个问题,您可能想使用图像映射,这是提供用于单击图像特定区域的HTML。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接