阻止子按钮触发分配给父级的jquery事件

阻止子按钮触发分配给父级的jquery事件,jquery,Jquery,我试图阻止表行中的按钮触发附加到该行的事件 此解决方案可行,但我不喜欢: $('table.orders tr.item').live('click',function(){ var id=$(this).attr('hrf'); document.location.href = id; }); $('table.orders tr.item .pdfIcon').live('click',function(e){ e.stopPropagation(); }); 我不喜欢附

我试图阻止表行中的按钮触发附加到该行的事件

此解决方案可行,但我不喜欢:

$('table.orders tr.item').live('click',function(){
    var id=$(this).attr('hrf');
    document.location.href = id;
});
$('table.orders tr.item .pdfIcon').live('click',function(e){
e.stopPropagation();
}); 
我不喜欢附加第二个事件来阻止第一个事件起作用的想法。我应该可以从选择中删除它

有人能提出更好的办法吗?

怎么样

$('table.orders tr.item').live('click',function(e){
    if ($(e.target).is('.pdfIcon')) return;
    var id=$(this).attr('hrf');
    document.location.href = id;
});
怎么样

$('table.orders tr.item').live('click',function(e){
    if ($(e.target).is('.pdfIcon')) return;
    var id=$(this).attr('hrf');
    document.location.href = id;
});
试一试

演示:

试试看


演示:

我刚刚阅读了on()的JQuery文档。我应该使用on()而不是live?这是更好的选择吗?它的行为方式是否与live()相同?是-
live
已被弃用,取而代之的是上的
。除了语法方面的好处外,还有一个很大的性能提升:
live
将事件从DOM一直冒泡到
body
,而
on
只允许事件一直冒泡到调用它的元素。
live
在1.9版本中也被删除。由于两个小错误,该代码实际上无法工作。在pdfIcon之前和之后的{它工作得很好,现在我已经做了这些更改。我还编辑了你提供的答案。谢谢你的帮助。也非常感谢你提醒我从1.9中删除live()-我正要更新它。看起来我有一些代码编辑要做!我刚刚阅读了关于()的JQuery文档。我应该使用on()而不是live?这是更好的选择吗?它的行为方式是否与live()相同是的-
live
已经被弃用,取而代之的是
on
。除了语法上的糖分之外,还有一个很大的性能提升:
live
将事件从DOM一直冒泡到
body
,而
on
只允许事件到达它被调用的元素。
live
也在1.9中被删除发布。由于两个小错误,此代码实际上不起作用,分别是.before pdfIcon和{before pdfIcon。现在运行良好。我已经做了这些更改。我还编辑了您提供的答案。感谢您的帮助。也非常感谢关于删除live()的提示从1.9开始-我正要更新它。看起来我有一些代码编辑要做!不会
if($(e.target).is('.pdfIcon'))返回;
be不会
if($(e.target).is('.pdfIcon'))return;
be enough这与@ethagnawl上一个答案基本相同。顺便说一下:-)我确实喜欢这个演示!这与@ethagnawl上一个答案基本相同。顺便说一下:-)我确实喜欢这个演示!
$('table.orders').on('click', 'tr.item', function(event) {
    if ($(event.target).hasClass('pdfIcon')) {
        return;
    }
    var id = $(this).attr('hrf');
    document.location.href = id;
});