49 votes

jQuery: comment remplacer .vivre avec .sur?

Double Possible:
jQuery 1.7 - Tournage live() sur()

Selon le jQuery API (http://api.jquery.com/on/) la fonction "live" est obsolète, il est recommandé d'utiliser le " on " à la place. Mais lorsque je remplace "en direct" avec " on " dans mon code, jQuery peut pas trouver plus tard ajouté des éléments plus:

Cela fonctionne (mais est déconseillée):

$('li.bibeintrag').live('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});

Ceci est un exemple de l'API pour les "on":

$("#dataTable tbody tr").on("click", function(event){
    alert($(this).text());
});

Quand j'ai modifier mon code pour ce ("live", remplacé par "sur"), il ne fonctionne plus (jQuery ne trouverez pas plus tard ajouté des éléments (par exemple avec l'ajout)):

$('li.bibeintrag').on('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});

Ce que je fais mal? Quelqu'un peut-il aider, s'il vous plaît?

65voto

VisioN Points 62518

Vous devez ajouter un événement à tout élément parent de l' li.bibeintrag.

$('ul').on('click', "li.bibeintrag", function(){
    alert('myattribute =' + $(this).attr('myattribute'));
});

33voto

Jonathan Sampson Points 121800

jQuery live, lorsqu'il est vu à travers l' $.on style aurait ressemblé à ceci:

$(document).on("click", "li.bibeintrag", function(){

});

Il serait d'écouter cliquez sur événements en document de niveau, et de déterminer si leur cible correspondait à la deuxième paramètre de $.on. Vous et moi sommes encouragés à le faire nous-mêmes, mais plutôt que d'écouter au niveau du document, nous voulons vous écouter, beaucoup plus proche de l'élément lui-même (si l'événement n'a pas besoin de se propager trop loin avant de manipulation).

Puisque vous êtes de répondre aux clics sur un li, écoutez, au niveau de laquelle les éléments du parent:

$("ul#myList").on("click", "li.bibeintrag", function(){
  /* Respond */
});

Gardez à l'esprit que sans fournir le deuxième paramètre de $.on, le gestionnaire d'événement est lié à l'élément lui-même, ce qui signifie que vous n'obtenez pas le comportement de l' $.live qui permettrait de réagir dynamiquement des éléments ajoutés.

0voto

Shyju Points 46555

Cela devrait fonctionner

$('ul').on('click','li.bibeintrag' function(){
  alert('myattribute =' + $(this).attr('myattribute'));
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X