A partir de jQuery 1.7 debe usar jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
Antes de esto , el enfoque recomendado era usar live()
:
$(selector).live( eventName, function(){} );
Sin embargo, live()
fue desaprobado en 1.7 a favor on()
y eliminado por completo en 1.9. La live()
firma:
$(selector).live( eventName, function(){} );
... se puede reemplazar con la siguiente on()
firma:
$(document).on( eventName, selector, function(){} );
Por ejemplo, si su página estaba creando dinámicamente elementos con el nombre de la clase dosomething
, vincularía el evento a un padre que ya existe (este es el meollo del problema aquí, necesita algo que existe para vincularlo, no se enlace al contenido dinámico), esto puede ser (y la opción más fácil) es document
. Aunque tenga en cuenta que document
puede no ser la opción más eficiente .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Cualquier padre que exista en el momento en que se vincula el evento está bien. Por ejemplo
$('.buttons').on('click', 'button', function(){
// do something here
});
se aplicaría a
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>