¿Hay alguna manera con jQuery de activar manualmente un controlador de eventos delegados?¿Cómo activo manualmente un evento delegado con jQuery?
tomar el código siguiente ejemplo:
<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>
(línea: http://jsfiddle.net/TcHBE/)
que estaba esperando que esto funcionaría, y el texto "Hola" aparecería en el lapso sin tener que hacer clic en el botón, pero no es así
estoy usando e.delegateTarget
dentro del controlador, ya que el elemento .ouput
no estará en una relación conocida con el botón, aparte de algún lugar dentro de la .container
. Es por eso que estoy usando un controlador de eventos delegados en primer lugar.
Actualización:
También estoy usando triggerHandler
, debido a que el evento tiene un comportamiento por defecto en el código real que no quiero para disparar. (En el código real, el evento es el evento personalizado hide
del Bootstrap Modal plugin, pero en realidad no quiero ocultar el modal al activar el controlador de eventos en la carga de la página).
Podría extraer el controlador en una función nombrada y llamarlo directamente, pero debido al uso de e.delegateTarget
, eso complicaría la construcción de cómo.
Actualiza el código para ver el problema. No está claro que desee evitar que otros manejadores de eventos o la acción predeterminada sucedan. – Prinzhorn