我有一个表,其中包含一些行的类。所有行都有链接,当我点击实际行时,我想执行一个函数但阻止传播所有链接。
在我的函数上使用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);">
答案 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
});