如何在单击td div span时阻止tr上的默认处理程序?

时间:2012-02-14 20:37:09

标签: jquery

我有一个可点击的表格行:

$("#content-display").on('click', '#myTable tbody tr', function (){           
    foo();        
});

表格格式为

<table>
<tbody>
    <tr><td><div><span></span></div></td></tr>
    <tr><td><div><span></span></div></td></tr>
    <tr><td><div><span></span></div></td></tr>
    <tr><td><div><span></span></div></td></tr>
</tbody>
</table>

当用户直接点击第3个内容时,我只想调用函数bar()(不是foo()

$("#content-display").on('click',
                         '#myTable tbody tr td:first-child + td + td div span',
                          function (){
    bar(); 
});

不幸的是,当用户点击该范围时,系统会调用foo()bar()

我也试过这个,但仍然会调用foo()bar()

$("#content-display").on('click',
                         '#myTable tbody tr td:first-child + td + td div span',
                          function (event){
    event.preventDefault();
    bar(); 
});

3 个答案:

答案 0 :(得分:3)

event.stopPropagation()正是您要找的。

有关详细信息,请参阅jQuery docs

答案 1 :(得分:2)

而不是event.preventDefault();尝试使用:

event.stopPropagation();

更新了处理程序:

$("#content-display").on('click',
                     '#myTable tbody tr td:first-child + td + td div span',
                      function (event){
    event.stopPropagation();
    bar(); 
});

答案 2 :(得分:2)

我相信你可以阻止它使用event.stopPropagation()

触发第一个事件