2010-12-10 130 views
3

我有一个表行贴有鼠标JavaScript操作单击表行内的任何地方:如何忽略第一个事件并跳到第二个?

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

如果用户点击该行中的任何地方,我想要的JavaScript操作,someAction(本),被关注。但是,如果用户单击第2页的链接,则我希望忽略该操作并遵循链接。

不幸的是,该操作首先被观察到,这恰好将链接文本的位置移动到足以让点击被删除。换句话说,在这种情况下,用户不能实际点击链接并转到第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部分已经被需要,所以我在这里添加了我需要的内容。

感谢您的所有帮助和建议! :)

回答

5

如果你使用jQuery,这将是简单的(假设你已经设定和id =“行”的TR元素,和id =“链接”的元素):

$('#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) 
+0

谢谢!我没有在这个项目中使用jQuery,所以我使用了一些包含在HTML中的JavaScript来完成这个任务(参见上面我编辑的问题)。 – Trevor 2010-12-20 18:12:13

+0

@Stephen,谢谢你让它更清晰 – unclenorton 2011-06-27 12:21:11

相关问题