jQuery触发器('click')问题

时间:2011-09-13 09:02:49

标签: jquery

我有可点击的行,它会触发链接onclick事件,但trigger()会在tr.clickable上引发新的点击事件并进入循环。如何防止这种情况?

<table>
    <tr class="clickable">
        <td>Test row</td>
        <td><a href="#" onclick="alert('click');" class="trigger"></a></td>        
    </tr>
</table>

JS:

$('tr.clickable').click(function(){
    var trigger = $(this).find('a.trigger');
    trigger.trigger('click');
});

现场演示here

4 个答案:

答案 0 :(得分:6)

这取决于JavaScript中的事件冒泡。这是你目前有点奇怪的设置,但解决这个问题的一种方法是阻止click标记上的a事件冒泡:

$('tr.clickable a').click(function (e) {
    e.stopPropagation();
});

Fiddle

或者,如果目标事件是相同的元素,则无法触发click触发器:

$('tr.clickable').click(function(e){
    var trigger = $(this).find('a.trigger').not(e.target);
    trigger.trigger('click');
});

Fiddle

我想,最好的方法可能是第一个解决方案。

答案 1 :(得分:2)

删除trigger.trigger('click');,就是这样:))

答案 2 :(得分:0)

试试这个脚本

    $('tr.clickable').click(function(){
         alert('Click');
 });

直播demo

答案 3 :(得分:0)

我建议使用event参数来检查点击的目标是什么。

$('tr.clickable').click(function(e){
  if (e.target.nodeName != 'A') {
    var trigger = jQuery(this).find('a.trigger');
    trigger.trigger('click');
  }
});