A partir do jQuery 1.7, você deve usar jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
Antes disso , a abordagem recomendada era usar live()
:
$(selector).live( eventName, function(){} );
No entanto, live()
foi preterido em 1,7 a favor on()
e completamente removido em 1,9. A live()
assinatura:
$(selector).live( eventName, function(){} );
... pode ser substituído pela seguinte on()
assinatura:
$(document).on( eventName, selector, function(){} );
Por exemplo, se sua página estava criando dinamicamente elementos com o nome da classe, dosomething
você vincularia o evento a um pai que já existe (este é o ponto principal do problema aqui, você precisará de algo que exista para se conectar, não vincule ao conteúdo dinâmico), pode ser (e a opção mais fácil) é document
. Embora tenha em mente que document
pode não ser a opção mais eficiente .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Qualquer pai que exista no momento em que o evento está vinculado é bom. Por exemplo
$('.buttons').on('click', 'button', function(){
// do something here
});
se aplicaria a
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>