0

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

在我的函数上使用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);">
4

1 回答 1

0

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

jQuery 不会覆盖内联事件处理程序,并且内联事件处理程序将在任何 jQuery 事件处理程序之前执行(请参阅将 JQuery 覆盖现有的内联事件处理程序吗?)。这个特定onclick的处理程序将阻止任何后续处理程序的执行,因为它返回false.

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

[编辑]

如果不能,一种方法是在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
});
于 2013-04-29T14:01:16.480 回答