Maison interface Web js tutoriel problème de liaison d'événement de nouvel élément jquery solution_jquery

problème de liaison d'événement de nouvel élément jquery solution_jquery

May 16, 2016 pm 04:44 PM
事件绑定

La surveillance des événements de js est différente de celle de css Tant que le style de css est défini, qu'il soit existant ou nouvellement ajouté, il aura les mêmes performances. Mais l'écoute des événements n'est pas le cas. Vous devez lier les événements à chaque élément individuellement.

Un exemple courant est celui du traitement des tables. Il y a un bouton Supprimer à la fin de chaque ligne. Cliquez dessus pour supprimer cette ligne.

Copier le code Le code est le suivant :


< tbody>

;
;/bouton>

>Habituellement, je lierais comme ça




Copier le code

Le code est le suivant :
Tout fonctionne parfaitement pour le bouton supprimer qui existait avant domready. Mais si vous utilisez js pour ajouter dynamiquement quelques lignes après domready, les boutons des lignes nouvellement ajoutées perdront tout effet.

Comment résoudre ce problème ? 4 solutions sont proposées ci-dessous :


Solution n°0 - méthode onclick

Si vous ignorez le principe de séparation de la structure et du comportement, généralement, je ferai cela.
Notez que la fonction deltr à ce moment doit être une fonction globale et doit être placée en dehors de jQuery(function($) {}). Si elle est placée à l'intérieur, elle devient une fonction locale, et onclick en html ne peut pas être appelé !



Copier le code

Le code est le suivant :

jQuery(function($){ //Ajouter une ligne$("#add2").click( function( ){ $("#table2>tbody").append('') }); });
//La fonction pour supprimer des lignes doit être placée en dehors de la fonction domready
function deltr(delbtn){
$(delbtn).parents("tr").remove();
}



Solution n° 1 - Répéter la liaison Le La formule


consiste à lier les gestionnaires d'événements aux éléments existants lorsque domready est en place,
puis à les lier à nouveau lorsque des éléments nouvellement ajoutés sont ajoutés.


Copier le code

Le code est le suivant :

jQuery(function($){ //Définissez la liaison de l'événement du bouton de suppression//Écrivez-le à l'intérieur pour éviter la contamination de l'espace de noms globalfunction deltr(){ $(this).parents("tr").remove(); }
//Il y a déjà un bouton de suppression initialisé pour lier le delete event
$( "#table3 .del").click(deltr);
//Ajouter une ligne
$("#add3").click(function(){
$('
// Supprimer ici Le bouton est à nouveau lié à l'événement.
.find(".del").click(deltr).end()
.appendTo($("#table3>tbody")); >});
});



Solution n°2 - Méthode de bouillonnement d'événement


En utilisant le principe du bouillonnement d'événement, on donne l'ancêtre élément de ce bouton Fonction de gestionnaire d'événements de liaison.
Utilisez ensuite l'objet event.target pour déterminer si cet événement a été déclenché par l'objet que nous recherchons.
Habituellement, vous pouvez utiliser certains attributs DOM, tels que event.target.className, event.target.tagName, etc. pour juger.


Copier le code

Le code est le suivant :



jQuery(function($){
//Quatrième La suppression Liaison d'événement de bouton d'une table
$("#table4").click(function(e) {
if (e.target.className=="del"){
$(e. target) .parents("tr").remove();
};
};
//Ajouter une liaison d'événement de bouton de la quatrième table
$("#add4") .click(function (){
$("#table4>tbody").append('')
});



Solution n° 3 - Méthode de copie d'événement.
Les solutions ci-dessus peuvent être considérées comme relativement faciles à mettre en œuvre même si vous n'utilisez pas la bibliothèque jQuery. Mais cette solution s'appuie davantage sur jQuery. Et cela doit nécessiter jQuery version 1.2 ou supérieure. Les versions inférieures de jQuery nécessitent des plug-ins.
Les deux solutions ci-dessus ont beaucoup réfléchi à la fonction de suppression et ont modifié diverses méthodes de déclenchement et de liaison. Cette solution est différente. Elle peut être liée au moment de la création tout comme les éléments purement statiques habituels. Mais lorsque nous ajoutons une nouvelle ligne, modifions-la. Nous ne voulons plus ajouter une nouvelle ligne en épissant des chaînes comme ci-dessus. Cette fois, nous essayons de copier les éléments du DOM. Et lors de la copie, copiez-le avec les événements liés. Après la copie, utilisez find ou similaire pour modifier les éléments internes.
En même temps, tout comme dans cet exemple, si vous supprimez tous les éléments, alors le modèle est nécessaire. Si vous ne les supprimez pas, vous n'aurez peut-être pas besoin d'utiliser le modèle. Afin d'éviter toute suppression accidentelle, j'ai masqué le modèle ici.
J'ai utilisé le clone unique (true) dans jQuery

Copiez le code Le code est le suivant :
.template{display:none;}




;

Cette ligne avait à l'origine
(function($){
//Supprimer la liaison d'événement du bouton de la cinquième table
$("#table5 .del").click(function() {
$(this) .parents("tr ").remove();
});
//Ajouter une liaison d'événement de bouton de la cinquième table
$("#add5").click(function(){
$("# table5>tbody>tr:eq(0)")
//Copier avec l'événement
.clone(true)
//Supprimer la balise du modèle
.removeClass( "template")
//Modifier les éléments internes
.find("td:eq(0)")
.text("Nouvelle ligne")
.end()
/ /Insérer un tableau
.appendTo($("#table5>tbody"))
});
});
Commentaires généraux :

Les 4 options ci-dessus ont leurs propres avantages et inconvénients.
Plan n°0, il n'y a pas de séparation entre structure et comportement, et cela pollue l'espace de noms global. Le moins recommandé. Donc je ne considère même pas cela comme un plan. Mais pour les débutants en js, il peut être utilisé pour des projets d'urgence.
Option 1, tout à fait satisfaisante, rien de bon ou de mauvais
Option 2, cette méthode utilise pleinement les avantages du bouillonnement d'événements js. Et le plus efficace. Mais en même temps, comme cette solution ignore le puissant sélecteur de jQuery, elle sera plus gênante si trop d'exigences d'attributs d'éléments sont impliquées. Vous errerez parmi les bonnes et les mauvaises relations de nombreuses conditions. Plus tard, je me suis souvenu que je pouvais utiliser $(event.target).is(selector) dans jQuery comme condition. Cela peut grandement améliorer l’efficacité du développement, mais réduire légèrement l’efficacité de l’exécution.
Le plan n°3, c'est le plan qui, selon moi, incarne le mieux l'idée de séparation de la structure et du comportement. Mais les inconvénients sont également évidents. La dépendance à jQuery est trop élevée, sinon il faut écrire une fonction qui copie les événements ensemble, ce qui est évidemment extrêmement difficile pour les débutants. Mais du point de vue des tendances futures, cette solution reste fortement recommandée.

Il n'y a pas de numéro défini sur quel forfait choisir. Cela dépend de votre projet et de votre maîtrise de js et de l'idée de séparation de structure et de comportement. Le plus adapté est le meilleur.

Supplémentaire :

Transformez le plan 3 en un style de séparation structure-comportement parfait.
Tout d'abord, celui avec modèle est l'élément modèle. C'est la source de toutes les copies. Afin d'éviter toute suppression accidentelle, elle est définie sur invisible. Cet élément de modèle est également facultatif si la lumière ne sera pas supprimée. Parce que vous pouvez copier n’importe quel élément existant pour le mettre en boucle.
Deuxièmement, ajoutez une répétition à chaque élément répété pour faciliter le bouton Supprimer pour trouver ce niveau d'éléments. Ceci est facultatif et parfois non obligatoire.
Enfin, ajoutez une classe à chaque élément à modifier afin qu'il puisse être facilement retrouvé à l'aide de find. Par exemple, j'ai une classe de contenu ici, et la classe nouvellement ajoutée peut modifier la valeur à l'intérieur.
Cela complète un cas parfait de séparation de la structure et du comportement.
Copier le code Le code est le suivant :




>
;td class="content">Cette ligne avait à l'origine
tr>

">Supprimer





>
Cette ligne avait à l'origine
Supprimer
Nouvelle ligne
Supprimer
Ajouter une nouvelle ligne
Voici le modèle
Voici le modèleSupprimer
Cette ligne avait à l'origine
Ajouter


jQuery(function($){
//Supprimer la liaison d'événement du bouton de la sixième table
$("#tbody6 .del" ).click(function() {
$(this).parents(".repeat").remove();
});
//Ajouter une liaison d'événement de bouton pour la sixième table
$("#add6") .click(function(){
$("#tbody6>.template")
//Copier avec l'événement
.clone(true)
/ /Supprimer les balises de modèle
. removeClass("template")
//Modifier les éléments internes
.find(".content")
.text("Nouvelle ligne")
.end ()
//Insérer un tableau
.appendTo($("#tbody6"))
});
});


De même, ce js s'applique également à la structure HTML suivante




Copiez le code

Le code est le suivant :



  • Voici le modèle


  • >Cette ligne avait à l'origine
    ;/li>

  • Cette ligne avait à l'origine "del">Supprimer

  • ;/script>


    Déclaration de ce site Web
    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

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Combien de façons existe-t-il de lier des événements dans jquery ? Combien de façons existe-t-il de lier des événements dans jquery ? Nov 09, 2020 pm 03:30 PM

    Il existe 4 façons de lier des événements dans jquery, à savoir : les méthodes bind(), live(), délégué() et on() ; la méthode bind() ne peut lier des événements qu'à des éléments existants, tandis que la méthode live() ), on ; () et délégué() prennent tous en charge la liaison d'événements pour les éléments nouvellement ajoutés à l'avenir.

    Résolvez le problème de l'erreur UniApp : l'événement 'xxx' n'est pas lié Résolvez le problème de l'erreur UniApp : l'événement 'xxx' n'est pas lié Nov 25, 2023 am 10:56 AM

    Lors du développement d'applications à l'aide d'UniApp, vous pouvez rencontrer le message d'erreur suivant : l'événement 'xxx' n'est pas lié. Cela est dû au mécanisme de liaison d'événements d'UniApp, qui doit être configuré correctement pour résoudre ce problème. 1. Cause du problème Dans UniApp, la liaison des événements des composants de page est effectuée via l'instruction v-on. Par exemple, ajoutez un composant de bouton au modèle : &lt;button@click="onClick"&gt;Click me&lt;/butto

    Comment ajouter des événements aux éléments ? Trois façons d'analyser les événements de liaison JS Comment ajouter des événements aux éléments ? Trois façons d'analyser les événements de liaison JS Aug 04, 2022 pm 07:27 PM

    En tant que langage de script, JavaScript peut lier des événements aux éléments de la page, de sorte que lorsqu'un événement spécifié se produit, le gestionnaire d'événements correspondant puisse être automatiquement appelé pour gérer l'événement. Alors comment ajouter des événements aux éléments ? L'article suivant vous présentera trois façons de lier des événements dans JS. J'espère qu'il vous sera utile !

    Une discussion approfondie de la technologie de liaison d'événements jQuery Une discussion approfondie de la technologie de liaison d'événements jQuery Feb 26, 2024 pm 07:36 PM

    jQuery est une bibliothèque JavaScript populaire largement utilisée pour gérer l'interactivité des pages Web. Parmi eux, la liaison d'événements est l'une des fonctions importantes de jQuery, grâce à la liaison d'événements, des réponses aux interactions des utilisateurs peuvent être obtenues. Cet article explorera la technologie de liaison d'événements jQuery et donnera des exemples de code spécifiques. 1. Le concept de base de la liaison d'événements La liaison d'événements fait référence à l'ajout d'un écouteur d'événements sur un élément DOM pour effectuer des opérations spécifiées lorsqu'un événement spécifique se produit. Dans jQuery, sélectionnez le souhaité

    Que dois-je faire si la liaison d'événement « click » n'est pas valide dans mon application Vue ? Que dois-je faire si la liaison d'événement « click » n'est pas valide dans mon application Vue ? Jun 24, 2023 pm 03:51 PM

    Vue est un framework JavaScript populaire pour créer des applications Web modernes. Dans Vue, nous utilisons généralement des directives pour faire fonctionner les éléments DOM. Parmi eux, l'événement "click" est l'une des instructions couramment utilisées. Cependant, dans les applications Vue, nous rencontrons souvent des situations où la liaison de l'événement "click" n'est pas valide. Cet article explique comment résoudre ce problème. La première étape pour vérifier si un élément existe est de confirmer si l'élément auquel vous souhaitez lier un événement "clic" existe. Si l'élément n'existe pas,

    Quelle est la fonction de l'événement de liaison jquery Quelle est la fonction de l'événement de liaison jquery Mar 20, 2023 am 10:52 AM

    La fonction de l'événement de liaison jquery : lier les événements ordinaires aux nœuds DOM lorsque le nœud DOM est sélectionné, liez-y l'événement pour permettre aux utilisateurs de fournir les opérations correspondantes. jQuery fournit quatre méthodes de liaison d'événements, à savoir bind, live, délégué et on, et les fonctions de désécoute correspondantes sont unbind, die, undelegate et off.

    Comment utiliser les paramètres de la fonction de liaison d'événement dans la documentation Vue Comment utiliser les paramètres de la fonction de liaison d'événement dans la documentation Vue Jun 20, 2023 pm 02:06 PM

    Vue est un framework JavaScript populaire qui utilise des idées basées sur les données pour simplifier le processus de développement. La fonction de liaison d'événements de Vue est très puissante et peut gérer diverses interactions sur la page. Au cours du processus de développement de Vue, les paramètres de la fonction de liaison d'événements sont souvent utilisés. Cet article présentera en détail l'utilisation de cette fonction. Dans Vue, vous pouvez utiliser la directive v-on pour lier des événements. La directive v-on est suivie du nom de l'événement et de la fonction de gestion des événements, par exemple : &lt;bu

    Analyse approfondie des techniques de liaison d'événements jQuery Analyse approfondie des techniques de liaison d'événements jQuery Feb 26, 2024 pm 06:33 PM

    jQuery est une bibliothèque JavaScript populaire qui simplifie de nombreuses tâches courantes dans le développement Web, notamment la sélection d'éléments, la manipulation du DOM et la gestion des événements. Dans jQuery, la liaison d'événements est l'une des opérations les plus courantes et les plus importantes. Cet article explorera en détail les méthodes de liaison d'événements dans jQuery et utilisera des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et appliquer ces méthodes. 1. Méthode bind() La méthode bind() est l'une des méthodes de liaison d'événements les plus traditionnelles et les plus couramment utilisées. ça peut

    See all articles