Есть ли способ с 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
. Вот почему я использую делегированный обработчик событий в первую очередь.
Update:
Также я использую triggerHandler
, потому что событие имеет поведение по умолчанию в реальном коде, который я не хочу запускать. (В реальном коде событие является настраиваемым событием hide
плагина Bootstrap Modal, но на самом деле я не хочу скрыть модальность при запуске обработчика события при загрузке страницы).
Я мог бы извлечь обработчик в именованную функцию и вызвать его напрямую, но из-за использования e.delegateTarget
это сделает конструкцию более сложной.