委任されたイベントハンドラーを手動でトリガーする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の構成がより複雑になります。