Maison  >  Article  >  interface Web  >  Explication détaillée de la solution au problème du remplacement de la méthode live par la méthode on dans jquery

Explication détaillée de la solution au problème du remplacement de la méthode live par la méthode on dans jquery

黄舟
黄舟original
2017-06-26 09:35:211379parcourir

Les éléments que j'ajouterai dans le futur seront épissés avec ajax
Mon on est écrit comme ça

$("td").on("click","a",function(){
alert("Aha!");
});

C'est le tag de la page

<td><a class="topic_a" href="#creat"  name=&#39;${data.context }&#39;>选择</a></td>

La balise d'épissage ajax est exactement la même que la balise ci-dessus.

Mais cliquer sur mon tag épissé n'a aucun effet.
Pourquoi ?

Veuillez vous assurer que lorsque vous utilisez on pour lier, td existe déjà dans le dom..
Aussi..pourquoi live peut l'être parce que live est lié au document..à tout moment Le document existe tous..
Celui que vous utilisez, votre événement est lié à td..Si td n'existe pas, il ne sera certainement pas lié

Veuillez apprendre en savoir plus sur le mécanisme de délégation d'événements.

Remplacez-le par délégué

Les éléments ajoutés à l'avenir incluront-ils b6c5a531a458a2e790c1fd6421739d1c ?
Si b6c5a531a458a2e790c1fd6421739d1c est inclus, le proxy d'événement ne peut pas être lié à $("td").
Le proxy d'événement doit être lié à un élément de niveau supérieur
Par exemple, f5d188ed2c074f8b944552db028f98a1 ou l'élément parent de f5d188ed2c074f8b944552db028f98a1
Si cela ne fonctionne pas, vous pouvez également le lier à le corps ou le document
tel que

$("body").on("click","a",function(){
alert("Aha!");
});

Utiliser sur reliure.
Épissez-le d'abord, puis ajoutez-le à la page, puis liez l'événement.
En js, il se lit aussi ligne par ligne.

L'événement de liaison est écrit devant, et le td ajouté plus tard n'aura bien sûr pas cet événement.
Assurez-vous également que td a été écrit sur la page.

La méthode live n'est disponible que dans l'ancienne version de jquery La méthode on ne peut utiliser que les balises existantes sur la page
Si vous souhaitez obtenir des éléments futurs, vous pouvez le faire. utilisez uniquement la méthode déléguée. La méthode d'écriture spécifique est la suivante :

//div是页面已经有的元素,button是js生成的未来元素!
$("div").delegate("button","click",function(){
  $("p").slideToggle();
});
 $(document).on(&#39;click&#39;, &#39;td a&#39;, function() {
    alert("Aha!");
  });
 $("body").delegate("td","click",function(){
    alert("ok!");
  });

Veuillez vous assurer que lorsque vous le liez avec on, td existe déjà dans le dom..
Aussi...pourquoi live peut être utilisé car live est Il est lié au document.. Le document existe à tout moment..
Lorsque vous utilisez on, votre événement est lié au td.. Si le td existe n'existe pas, il ne sera certainement pas lié

Veuillez en savoir plus sur le mécanisme de proxy d'événement.

Écrivez-le comme ceci

$("body").on("click","td a.topic_a",function(){
alert("Aha!");
});

Les éléments seront-ils ajoutés à l'avenir incluent b6c5a531a458a2e790c1fd6421739d1c?
Si b6c5a531a458a2e790c1fd6421739d1c est inclus, le proxy d'événement ne peut pas être lié à $("td").
Le proxy d'événement doit être lié à un élément de niveau supérieur
Par exemple, f5d188ed2c074f8b944552db028f98a1 ou l'élément parent de f5d188ed2c074f8b944552db028f98a1
Si cela ne fonctionne pas, vous pouvez également le lier à le corps ou le document
tel que

$("body").on("click","a",function(){
alert("Aha!");
});

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn