首页 > 解决方案 > onclick 处理程序并不总是在更新子元素时运行

问题描述

我有一排<a>具有onclick处理程序的元素:

<a onclick="selectCoin('MER');">
<div id="MER">
...
</div>
</a>

孩子的内部<div>被不断地覆盖以更新按钮内的一些文本。更新是通过查询#MER选择器并分配给 来完成的innerHTML。我注意到如果元素在后台更新,onclick处理程序并不总是运行。很多时候,我必须在hander 真正被调用<div>之前点击它两到三遍。onclick如果我将<div>元素设为静态,则onclick处理程序会始终如一且可靠地运行。

为什么更新<div>孩子会导致onclick处理程序停止工作?如何在更新按钮内容的同时解决此问题?

标签: javascripthtml

解决方案


要生成点击事件,元素必须接收 amousedown后跟 a mouseup

如果元素在 之后消失mousedown并被新元素替换,则不会发送单击事件。

您可以对元素进行自己的 mousedown/mouseup 检测<a>,但如果元素内的任何内容都不是真正可点击的,则可以禁用子元素上的鼠标事件,以便它们都发生在<a>元素上

在您的“MER” div 上:

style="pointer-events:none;"

工作小提琴:

https://jsfiddle.net/8h17rcpz/


推荐阅读