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 插件的自定义事件hide
,但我实际上并不想在页面加载时触发事件处理程序时隐藏模式)。
我可以将处理程序提取到一个命名函数中并直接调用它,但是由于使用e.delegateTarget
,这会使 how 构造更加复杂。