【发布时间】:2019-06-13 03:55:56
【问题描述】:
jQuery 有没有办法手动触发委托事件处理程序?
以下示例代码:
<div class="container">
<input type="button" value="Hello">
<span class="output"></span>
</div>
<script>
$('.container')
.on('click', '[type=button]', function(e) {
$(e.delegateTarget).find('.output').text($(this).val());
})
.find('[type=button]').triggerHandler('click');
</script>
(在线:http://jsfiddle.net/TcHBE/)
我原以为这会起作用,并且文本“Hello”会出现在跨度中,而无需实际单击按钮,但事实并非如此。
我在处理程序中使用e.delegateTarget,因为.ouput 元素与按钮的关系不为已知,除了.container 中的某个位置。这就是我首先使用委托事件处理程序的原因。
更新:
我也使用triggerHandler,因为该事件在我不想触发的真实代码中具有默认行为。 (在实际代码中,该事件是Bootstrap Modal plugin 的自定义事件hide,但我实际上并不想在页面加载时触发事件处理程序时隐藏模式)。
我可以将处理程序提取到一个命名函数中并直接调用它,但是由于使用了e.delegateTarget,这会使方法构造更加复杂。
【问题讨论】:
-
更新您的代码以显示实际问题。不清楚您是否要阻止其他事件处理程序或默认操作发生。
标签: jquery