我有可点击的行,它会触发链接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。
答案 0 :(得分:6)
这取决于JavaScript中的事件冒泡。这是你目前有点奇怪的设置,但解决这个问题的一种方法是阻止click
标记上的a
事件冒泡:
$('tr.clickable a').click(function (e) {
e.stopPropagation();
});
或者,如果目标事件是相同的元素,则无法触发click
触发器:
$('tr.clickable').click(function(e){
var trigger = $(this).find('a.trigger').not(e.target);
trigger.trigger('click');
});
我想,最好的方法可能是第一个解决方案。
答案 1 :(得分:2)
删除trigger.trigger('click');
,就是这样:))
答案 2 :(得分:0)
答案 3 :(得分:0)
我建议使用event参数来检查点击的目标是什么。
$('tr.clickable').click(function(e){
if (e.target.nodeName != 'A') {
var trigger = jQuery(this).find('a.trigger');
trigger.trigger('click');
}
});