Heim Web-Frontend js-Tutorial jquery neues Element Ereignisbindungsproblem Lösung_jquery

jquery neues Element Ereignisbindungsproblem Lösung_jquery

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

Die Ereignisüberwachung von js unterscheidet sich von der von CSS. Solange der CSS-Stil festgelegt ist, hat er die gleiche Leistung, unabhängig davon, ob er vorhanden ist oder neu hinzugefügt wurde. Das Abhören von Ereignissen ist jedoch nicht der Fall. Sie müssen Ereignisse einzeln an jedes Element binden.

Ein häufiges Beispiel ist die Verarbeitung von Tabellen. Am Ende jeder Zeile befindet sich eine Schaltfläche zum Löschen. Klicken Sie hier, um diese Zeile zu löschen.

Code kopieren Der Code lautet wie folgt:

< tbody>

Diese Zeile hatte ursprünglich ;
;/button>
>Normalerweise würde ich so binden




Code kopieren

Der Code lautet wie folgt:

jQuery (function($){ //Es ist bereits eine Löschschaltfläche initialisiert, um das Löschereignis zu binden $(".del").click(function() { $(this).parents( "tr").remove(); });
Alles funktioniert perfekt für die Löschtaste, die es vor domready gab. Wenn Sie jedoch js verwenden, um nach domready dynamisch einige Zeilen hinzuzufügen, verlieren die Schaltflächen in den neu hinzugefügten Zeilen jegliche Wirkung.

Wie kann dieses Problem gelöst werden? Nachfolgend finden Sie 4 Lösungen:


Lösung Nr. 0 – Onclick-Methode


Wenn Sie das Prinzip der Trennung von Struktur und Verhalten ignorieren, werde ich normalerweise Folgendes tun.
Beachten Sie, dass die Deltr-Funktion zu diesem Zeitpunkt eine globale Funktion sein muss und außerhalb von jQuery platziert werden muss (Funktion($) {}). Wenn sie innerhalb von jQuery platziert wird, wird sie zu einer lokalen Funktion und onclick in HTML kann nicht aufgerufen werden!




Code kopieren
Der Code lautet wie folgt:


Delete
jQuery(function($){ //Zeile hinzufügen$("#add2").click( function( ){ $("#table2>tbody").append('Neue Zeile
function deltr(delbtn){
$(delbtn).parents("tr").remove();



Lösung Nr. 1 – Bindung wiederholen Formel


besteht darin, Ereignishandler an vorhandene Elemente zu binden, wenn domready vorhanden ist,
und sie dann erneut zu binden, wenn neu hinzugefügte Elemente hinzugefügt werden.




Code kopieren

Der Code lautet wie folgt:



jQuery(function($){
//Definieren Sie die Ereignisbindung der Löschschaltfläche//Schreiben Sie sie hinein, um eine Kontamination zu verhindern der globale Namespacefunction deltr(){ $(this).parents("tr").remove(); //Es ist bereits eine Löschschaltfläche zum Binden initialisiert Ereignis löschen$( "#table3 .del").click(deltr); //Zeile hinzufügen
$("#add3").click(function(){
$(' ')
// Hier löschen Die Schaltfläche ist wieder an das Ereignis gebunden.
.find(".del").click(deltr).end()
.appendTo($("#table3>tbody")); >});
});



Lösung Nr. 2 – Event-Bubbling-Methode


Unter Verwendung des Prinzips des Event-Bubblings geben wir den Vorfahren Element dieser Schaltfläche. Event-Handler-Funktion binden.
Verwenden Sie dann das Objekt event.target, um festzustellen, ob dieses Ereignis durch das gesuchte Objekt ausgelöst wurde.
Normalerweise können Sie zur Beurteilung einige DOM-Attribute wie event.target.className, event.target.tagName usw. verwenden.




Code kopieren

Der Code lautet wie folgt:

Delete

jQuery(function($){
//Vierter Das Löschen Schaltflächenereignisbindung einer Tabelle
$("#table4").click(function(e) {
if (e.target.className=="del"){
$(e. target) .parents("tr").remove();
};
//Button-Ereignisbindung der vierten Tabelle hinzufügen
$("#add4") .click(function (){
$("#table4>tbody").append('Neue Zeile hinzufügen

Man kann sagen, dass die oben genannten Lösungen relativ einfach zu implementieren sind, auch wenn Sie die jQuery-Bibliothek nicht verwenden. Diese Lösung basiert jedoch stärker auf jQuery. Und es muss jQuery Version 1.2 oder höher erfordern. Niedrigere Versionen von jQuery erfordern Plug-Ins. Beide beiden oben genannten Lösungen haben viel über die Löschfunktion nachgedacht und eine Vielzahl von Auslöse- und Bindungsmethoden geändert. Diese Lösung ist anders. Sie kann wie die üblichen rein statischen Elemente sofort gebunden werden. Aber wenn wir eine neue Zeile hinzufügen, ändern wir sie. Wir möchten keine neue Zeile mehr hinzufügen, indem wir die Zeichenfolgen wie oben zusammenfügen. Dieses Mal versuchen wir, DOM-Elemente zu kopieren. Und beim Kopieren kopieren Sie es zusammen mit den gebundenen Ereignissen. Verwenden Sie nach dem Kopieren find oder ähnliches, um die internen Elemente zu ändern. Wenn Sie, genau wie in diesem Beispiel, alle Elemente löschen, ist die Vorlage erforderlich. Wenn Sie sie nicht löschen, müssen Sie möglicherweise keine Vorlage verwenden. Um ein versehentliches Löschen zu verhindern, habe ich die Vorlage hier ausgeblendet.
Ich habe den eindeutigen Klon (true) in jQuery verwendet




Kopieren Sie den Code
Der Code lautet wie folgt: .template{display:none;}
Hier ist die Vorlage (function($){
//Schaltflächenereignisbindung der fünften Tabelle löschen
$("#table5 .del").click(function() {
$(this) .parents("tr ").remove();
});
//Schaltflächenereignisbindung der fünften Tabelle hinzufügen
$("#add5").click(function(){
$("# table5>tbody>tr:eq(0)")
//Zusammen mit dem Ereignis kopieren
.clone(true)
//Vorlagen-Tag entfernen
.removeClass( "template")
//Interne Elemente ändern
.find("td:eq(0)")
.text("Neue Zeile")
.end()
/ /Tabelle einfügen
.appendTo($("#table5>tbody"))
});
Allgemeine Kommentare:

Die oben genannten 4 Optionen haben ihre eigenen Vor- und Nachteile.
Plan Nr. 0, es gibt keine Trennung zwischen Struktur und Verhalten und verschmutzt den globalen Namensraum. Am wenigsten empfohlen. Deshalb betrachte ich es nicht einmal als einen Plan. Aber für JS-Anfänger kann es für Notfallprojekte verwendet werden.
Option 1, recht zufriedenstellend, nichts Gutes oder Schlechtes
Option 2, diese Methode nutzt die Vorteile von js Event Bubbling voll aus. Und das effizienteste. Da diese Lösung jedoch den leistungsstarken Selektor von jQuery ignoriert, wird es gleichzeitig problematischer, wenn zu viele Elementattributanforderungen erforderlich sind. Sie werden zwischen den richtigen und falschen Beziehungen vieler Umstände hin- und herwandern. Später fiel mir ein, dass ich $(event.target).is(selector) in jQuery als Bedingung verwenden konnte. Dies kann die Entwicklungseffizienz erheblich verbessern, die Ausführungseffizienz jedoch geringfügig verringern.
Plan Nr. 3, das ist meiner Meinung nach der Plan, der die Idee der Trennung von Struktur und Verhalten am besten verkörpert. Aber auch die Mängel liegen auf der Hand. Die Abhängigkeit von jQuery ist zu groß. Ansonsten muss man eine Funktion schreiben, die die Ereignisse zusammen kopiert, was für Anfänger aber offensichtlich äußerst schwierig ist. Aus Sicht zukünftiger Trends ist diese Lösung jedoch weiterhin sehr zu empfehlen.

Es gibt keine eindeutige Zahl, für welchen Plan man sich entscheiden soll. Es hängt von Ihrem Projekt und Ihrer Beherrschung von js und der Idee der Trennung von Struktur und Verhalten ab. Das Passendste ist das Beste.

Zusätzlich:

Verwandeln Sie Plan 3 in einen perfekten Struktur-Verhalten-Trennungsstil.
Zuallererst ist das mit der Vorlage das Vorlagenelement. Es ist die Quelle aller Kopien, um ein versehentliches Löschen zu verhindern. Dieses Schablonenelement ist auch optional, wenn das Licht nicht entfernt werden soll. Weil Sie jedes vorhandene Element für die Schleife kopieren können.
Fügen Sie zweitens eine Wiederholung zu jedem wiederholten Element hinzu, damit die Schaltfläche „Löschen“ das Auffinden dieser Elementebene erleichtert. Dies ist optional und manchmal nicht erforderlich.
Fügen Sie abschließend jedem zu ändernden Element eine Klasse hinzu, damit es mit find leicht gefunden werden kann. Ich habe hier zum Beispiel eine Inhaltsklasse und die neu hinzugefügte kann den darin enthaltenen Wert ändern.
Dies vervollständigt den perfekten Fall der Trennung von Struktur und Verhalten.
Code kopieren Der Code lautet wie folgt:


> tr>
Diese Zeile hatte ursprünglich ">Löschen






>Diese Zeile hatte ursprünglich ;/li>
  • Diese Zeile hatte ursprünglich "del">Delete ;/script>


  • Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Wie viele Möglichkeiten gibt es, Ereignisse in JQuery zu binden? Wie viele Möglichkeiten gibt es, Ereignisse in JQuery zu binden? Nov 09, 2020 pm 03:30 PM

    Es gibt vier Möglichkeiten, Ereignisse in jquery zu binden: die Methoden bind(), live(), delegate() und on(). Die Methode bind() kann Ereignisse nur an vorhandene Elemente binden, während die Methode live() on () und Delegate() unterstützen alle die Ereignisbindung für neu hinzugefügte Elemente in der Zukunft.

    Lösen Sie das Problem des UniApp-Fehlers: Das Ereignis „xxx' ist nicht gebunden Lösen Sie das Problem des UniApp-Fehlers: Das Ereignis „xxx' ist nicht gebunden Nov 25, 2023 am 10:56 AM

    Beim Entwickeln von Anwendungen mit UniApp kann die folgende Fehlermeldung angezeigt werden: „xxx“-Ereignis ist nicht gebunden. Dies wird durch den Ereignisbindungsmechanismus von UniApp verursacht, der zur Lösung dieses Problems richtig eingestellt werden muss. 1. Ursache des Problems In UniApp wird die Ereignisbindung von Seitenkomponenten über die v-on-Anweisung abgeschlossen. Fügen Sie der Vorlage beispielsweise eine Schaltflächenkomponente hinzu: &lt;button@click="onClick"&gt;Click Me&lt;/butto

    Wie füge ich Ereignisse zu Elementen hinzu? Drei Möglichkeiten zum Parsen von JS-Bindungsereignissen Wie füge ich Ereignisse zu Elementen hinzu? Drei Möglichkeiten zum Parsen von JS-Bindungsereignissen Aug 04, 2022 pm 07:27 PM

    Als Skriptsprache kann JavaScript Ereignisse an Elemente auf der Seite binden, sodass beim Eintreten eines bestimmten Ereignisses automatisch der entsprechende Ereignishandler aufgerufen werden kann, um das Ereignis zu verarbeiten. Wie fügt man also Ereignisse zu Elementen hinzu? Der folgende Artikel stellt Ihnen drei Möglichkeiten vor, Ereignisse in JS zu binden. Ich hoffe, er wird Ihnen hilfreich sein!

    Welche Funktion hat das JQuery-Bindungsereignis? Welche Funktion hat das JQuery-Bindungsereignis? Mar 20, 2023 am 10:52 AM

    Die Funktion des Jquery-Bindungsereignisses: Binden Sie gewöhnliche Ereignisse an DOM-Knoten. Wenn der DOM-Knoten ausgewählt ist, binden Sie das Ereignis daran, um Benutzern die Bereitstellung entsprechender Vorgänge zu erleichtern. jQuery bietet vier Ereignisbindungsmethoden, nämlich bind, live, Delegate und on, und die entsprechenden nicht abhörenden Funktionen sind unbind, die, undelegate und off.

    Eine ausführliche Diskussion der jQuery-Ereignisbindungstechnologie Eine ausführliche Diskussion der jQuery-Ereignisbindungstechnologie Feb 26, 2024 pm 07:36 PM

    jQuery ist eine beliebte JavaScript-Bibliothek, die häufig für die Interaktivität auf Webseiten verwendet wird. Unter diesen ist die Ereignisbindung eine der wichtigen Funktionen von jQuery, mit der die Ereignisbindung eine Reaktion auf Benutzerinteraktionen realisieren kann. In diesem Artikel wird die jQuery-Ereignisbindungstechnologie untersucht und spezifische Codebeispiele gegeben. 1. Das Grundkonzept der Ereignisbindung. Unter Ereignisbindung versteht man das Hinzufügen eines Ereignis-Listeners zu einem DOM-Element, um bestimmte Vorgänge auszuführen, wenn ein bestimmtes Ereignis auftritt. Wählen Sie in jQuery das gewünschte aus

    Was soll ich tun, wenn die Ereignisbindung „Klick' in meiner Vue-Anwendung ungültig ist? Was soll ich tun, wenn die Ereignisbindung „Klick' in meiner Vue-Anwendung ungültig ist? Jun 24, 2023 pm 03:51 PM

    Vue ist ein beliebtes JavaScript-Framework zum Erstellen moderner Webanwendungen. In Vue verwenden wir normalerweise Direktiven, um DOM-Elemente zu bedienen. Unter diesen ist das „Klick“-Ereignis eine der am häufigsten verwendeten Anweisungen. In Vue-Anwendungen stoßen wir jedoch häufig auf Situationen, in denen die „Klick“-Ereignisbindung ungültig ist. In diesem Artikel wird erläutert, wie Sie dieses Problem lösen können. Der erste Schritt bei der Prüfung, ob ein Element vorhanden ist, besteht darin, zu bestätigen, ob das Element, an das Sie ein „Klick“-Ereignis binden möchten, vorhanden ist. Wenn das Element nicht existiert,

    So verwenden Sie Ereignisbindungsfunktionsparameter in der Vue-Dokumentation So verwenden Sie Ereignisbindungsfunktionsparameter in der Vue-Dokumentation Jun 20, 2023 pm 02:06 PM

    Vue ist ein beliebtes JavaScript-Framework, das datengesteuerte Ideen nutzt, um den Entwicklungsprozess zu vereinfachen. Die Ereignisbindungsfunktion von Vue ist sehr leistungsstark und kann verschiedene Interaktionen auf der Seite verarbeiten. Während des Entwicklungsprozesses von Vue werden häufig Parameter der Ereignisbindungsfunktion verwendet. In diesem Artikel wird die Verwendung dieser Funktion ausführlich vorgestellt. In Vue können Sie die v-on-Direktive verwenden, um Ereignisse zu binden. Auf die v-on-Direktive folgen der Ereignisname und die Ereignisbehandlungsfunktion, zum Beispiel: &lt;bu

    Eingehende Analyse der jQuery-Ereignisbindungstechniken Eingehende Analyse der jQuery-Ereignisbindungstechniken Feb 26, 2024 pm 06:33 PM

    jQuery ist eine beliebte JavaScript-Bibliothek, die viele häufige Aufgaben in der Webentwicklung vereinfacht, darunter Elementauswahl, DOM-Manipulation und Ereignisbehandlung. In jQuery ist die Ereignisbindung eine der häufigsten und wichtigsten Operationen. In diesem Artikel werden die Ereignisbindungsmethoden in jQuery im Detail untersucht und anhand spezifischer Codebeispiele den Lesern geholfen, diese Methoden besser zu verstehen und anzuwenden. 1.bind()-Methode Die bind()-Methode ist eine der traditionellsten und am häufigsten verwendeten Methoden zur Ereignisbindung. es kann

    See all articles