JavaScript onclick() 事件冒泡 - 工作与否?

标签 javascript dom-events event-bubbling

我有一个表,其中的表行标记用 onclick() 处理程序装饰。如果在任何地方单击该行,它将加载另一个页面。在该行的一个元素中,是一个 anchor 标记,它也指向另一个页面。

期望的行为是,如果他们单击链接,将加载“delete.html”。如果他们点击行中的其他任何地方,“edit.html”将被加载。

问题 有时(根据用户的说法)链接和 onclick() 同时触发,导致后端代码出现问题。他们发誓他们没有双击。

我对 JavaScript 事件冒泡、处理以及其他任何知识都知之甚少,甚至不知道从哪里开始解决这个奇怪的问题,所以我正在寻求帮助。这是呈现页面的片段,显示带有嵌入式链接和关联脚本标记的行。欢迎任何建议:

<tr id="tableRow_3339_0" class="odd">
   <td class="l"></td>
   <td>PENDING</td>
   <td>Yabba Dabba Doo</td>
   <td>Fred Flintstone</td>
   <td>
     <a href="/delete.html?requestId=3339">
       <div class="deleteButtonIcon"></div>
     </a>
  </td>
  <td class="r"></td>
</tr>
<script type="text/javascript">document.getElementById("tableRow_3339_0").onclick = function(event) { window.location = '//edit.html?requestId=3339'; };</script>

最佳答案

事件冒泡是这样工作的。如果元素 A 包含在元素 B 中,并且元素 A 被单击,则会为元素 A 触发点击事件,然后它将冒泡并为元素 B 触发。发生这种情况是因为从技术上讲,您同时单击了两个元素。

所以基本上,如果他们点击链接,点击事件就会冒泡到 tr 元素。根据链接点击加载下一页的速度,可能会发生 tr click 事件。

您可以停止在事件处理程序中冒泡:How to stop event propagation with inline onclick attribute?

关于JavaScript onclick() 事件冒泡 - 工作与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594726/

相关文章:

jquery - 如何使用更新的代码修改幻灯片来停止事件传播。

javascript - 如何在 JavaScript 中停止事件冒泡?

php - 加载页面时如何更改地址栏中的 URL?

javascript - 如何以一定的透明度在文本上阅读更多内容?

javascript - 监听自定义事件的 addEventListener 调用

类上的 JavaScript 点击事件监听器

javascript - 将样式附加到 DOM 不替换现有

javascript - 了解事件的前一个处理程序是否返回 false。 IE < 9 中的默认阻止?

javascript - 如何使顶部菜单中的下拉菜单无延迟/动画显示?

javascript - 按顺序执行 JavaScript