jQuery会阻止子行链接在单击时传播

时间:2013-04-29 13:43:39

标签: javascript jquery

我有一个表,其中包含一些行的类。所有行都有链接,当我点击实际行时,我想执行一个函数但阻止传播所有链接。

在我的函数上使用e.stopPropagation()正在运行,但其中一个链接中包含onclick函数和href=javascript:void(0);,所以它只是绕过我的e.stopPropagation语句并继续运行行点击功能的程序。

这是我的代码:

$('[class*=tooltip-properties]').click(function() { // this is the table row
    // do stuff
});
$('[class*=tooltip-properties] a').click(function(e) {
    e.stopPropagation();
});

导致麻烦的链接:

<a id="tageditlink25730" title="Edit" onclick="ame_ajax_form_tags(25730, 'LM');return false;" href="javascript:void(0);">

1 个答案:

答案 0 :(得分:0)

绕过jQuery处理程序的代码是onclick="... return false;"属性。

jQuery不会覆盖内联事件处理程序,内联事件处理程序将在任何jQuery事件处理程序之前执行(请参阅Will JQuery override existing inline event handlers?)。这个特殊的onclick处理程序将阻止执行任何后续处理程序,因为它返回false

如果您可以控制服务器端代码,则可以删除生成的页面中的return false部分,或者(甚至更好)删除onclick属性并使用jQuery绑定所有处理程序。< / p>

[编辑]

如果不能,一种方法是在a标记内添加子节点,并在该新节点上绑定一个点击处理程序:

$('[class*=tooltip-properties] a').each(function(){
    var html = $(this).html();
    $(this).html( '<span class="wrapper">'+html+'</span>' );
});

$('[class*=tooltip-properties] span.wrapper').click(function(){
    // do stuff
});