javascript - 如何忽略第一个事件并跳到第二个?

标签 javascript dom-events

我有一个表格行,它有一个 JavaScript Action 附加到表格行内任何地方的鼠标点击:

<tr onmousedown="someAction(this)">
    <td>cell 1</td>
    <td>cell 2</td>
    <td><a href="page2.html">cell 3</a></td>
</tr>

如果用户单击行中的任意位置,我希望执行 JavaScript 操作 someAction(this)。但是,如果用户单击指向 page2 的链接,那么我希望忽略该操作并跟随链接。

不幸的是,首先观察到的是操作,它恰好移动了链接文本的位置,刚好足以让点击停止。换句话说,在这种情况下,用户实际上无法单击链接并转到第 2 页。

如何禁用点击链接时的 mousedown 操作?

更新:根据回答,我最终在 HTML 的末尾包含了以下 JavaScript,它注册了一个事件处理程序以按照建议停止传播,如下所示:

...
<script type="text/javascript" language="javascript">
//<![CDATA[
function stopEvent(ev) {
    ev.stopPropagation();
}
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    links[i].addEventListener("onmousedown", stopEvent, false);
}
//]]>
</html>

这本可以很容易地包含在文档的 onload 事件中,但是由于其他原因已经需要 CDATA 部分,所以我在此处添加了我需要的内容。

最佳答案

如果您使用的是 jQuery,就这么简单(假设您为 tr 元素设置了 id='row',为元素设置了 id='link'):

$('#row').click(someaction);
$('#link').click(function(event){event.stopPropagation()});

你可以看看这个例子:http://jsfiddle.net/VDQMm/

如果没有 jQuery,几乎是一样的,但是你必须先获取每个元素的句柄,然后使用 addEventListener 方法附加一个事件监听器(通过将最后一个参数设置为 false 使行处理程序使用冒泡而不是捕获) ,然后是相同的旧 event.stopPropagation()。

它会是这样的(http://jsfiddle.net/VDQMm/2):

var row = document.getElementById('row');
var link = document.getElementById('link');
row.addEventListener('click',alert('clicked row!'),false)
link.addEventListener('click',function(event){event.stopPropagation()},false)

关于javascript - 如何忽略第一个事件并跳到第二个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413543/

相关文章:

javascript - 替换纯文本字符串中的 html 元素

javascript - Underscore.js 将对象键展平为数组

javascript - 如何停止 html 5 直播中的视频

javascript - 在 Javascript 中一次获取一个字符的事件

javascript - 在 Javascript 中注册 document.click 事件时,如何在 IE 中正确获取事件目标?

javascript - 无法使用 npm 在 macOS 上安装 vue

javascript - 我的 jQuery 简写 "$.get()"ajax 方法及其回调函数的奇怪行为

javascript - HTML/Javascript 中的乘法表

javascript - 如何使用 JavaScript 停止文件上传事件

表单中的 JavaScript 表单提交包含提交按钮