有沒有辦法用jQuery手動觸發委託事件處理程序?如何使用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
,這會使得構造更復雜。
更新您的代碼以顯示實際問題。目前還不清楚是否要阻止其他事件處理程序或默認操作發生。 – Prinzhorn