我有以下 HTML 表:
<table>
<tr>
<td>
Row 1
</td>
<td>
<!-- Hidden JSF-button -->
<button class="hide" />
</td>
</tr>
</table>
当我点击 atr
时,我触发了对带有 JS 的隐藏按钮的点击:
$('table tr').on('click', function(e) {
var $button = $(this).find('button');
console.log('trigger click on', $button);
$button.trigger('click');
});
点击事件向上传播,并将导致一个永无止境的循环(可以在这里看到: http: //codepen.io/anon/pen/kDxHy)
在 SO 上进行一些搜索后,很明显解决方案是调用event.stopPropagation
,
就像这样(可以在这里看到: http: //codepen.io/anon/pen/BnlfA):
$('table tr').on('click', function(e) {
var $button = $(this).find('button');
// Prevent the event from bubbling up the DOM tree.
$button
.off('click')
.on('click', function(e) {
console.log('click');
e.stopPropagation();
return true;
});
console.log('trigger click on', $button);
$button.trigger('click');
});
上面的解决方案有效。但这感觉就像一个黑客,我不喜欢它。
我是否必须在$button
刚刚调用的时候注册一个点击处理程序event.stopPropagation
?有没有更好的方法来防止点击事件冒泡?