如何防止jQuery中目标元素内的嵌套元素中的事件处理程序?

时间:2013-02-14 02:48:59

标签: jquery dom javascript-events

<tr>
  <td>
    <a></a>
  </td>
</tr>

好的是<tr>节点有事件监听器$('tr').click(handler1)。但我不希望<a>节点具有与has相同的行为。

无论如何我可以在没有jQuery的情况下完成它吗?

4 个答案:

答案 0 :(得分:2)

同时向a添加事件处理程序并防止默认

$(function(){
  $("tr a").click(function(e){
       e.preventDefault();
   });
});

更新

如果您希望该链接继续执行默认操作,但您不希望该事件冒泡到tr,则将其更改为e.stopPropagation();而不是e.preventDefault();

答案 1 :(得分:2)

您可以将此类内容视为使用jQuery

的替代方法
document.getElementById('x').addEventListener('click', function(e){
    if(e.target.tagName == 'A'){
        alert('Clicked A')
    }else{
        alert('clicked tr')
    }
    }, false);

演示:fiddle

使用jQuery:

$('tr').on('click', function(e){
    if($(e.target).is('a')){
        alert('clicked a')
    } else {
        alert('clicked tr')
    }
})

演示:Fiddle

答案 2 :(得分:1)

$('tr').click(function(e){
    e.preventDefault();
});

答案 3 :(得分:1)

$('tr').click(function(e){    
     if($(e.target).is('#youranchorelementid')){ //you can use class also if you have many elements
    e.preventDefault();
    }

});