Wie verhindert man ein Klick-Ereignis in jQuery?

8

Mein HTML-Code ist wie folgt:

%Vor%

Es gibt zwei Funktionen in <h4> , wenn der Benutzer auf header, d. h. <h4> , klickt, dann muss ich ein Popup mit Bearbeitungsformular öffnen. Wenn der Benutzer auf Bild / Symbol löschen klickt, muss ich eine Löschfunktion ausführen.

Beide Funktionen editFun und deletefun führen Ajax-Aufrufe aus. Wenn der Benutzer in meinem Fall auf das Löschen-Symbol klickt, ruft er zuerst editFun function auf und ruft dann deleteFun auf. Wie kann ich die entsprechende Funktion für das Ereignis aufrufen?

    
Swap L 30.01.2014, 13:43
quelle

5 Antworten

3

Wenn Sie jQuery verwenden, entfernen Sie die inline JS und CSS und verschieben Sie sie in ihre eigenen Dateien:

CSS:

%Vor%

HTML

%Vor%

JS

%Vor%

In diesem Fall können Sie einfach die Daten-ID auf dem übergeordneten Knoten verwenden. Datenattribute sind bei weitem die beste Möglichkeit, Daten auf Ihren HTML-Elementen zu speichern.

%Vor%     
Andy 30.01.2014, 13:55
quelle
3

Ihr Problem = Klick-Weiterleitung

Ereignisse im Browser werden entlang der DOM-Elementbaumstruktur verbreitet. Sie müssen dies stoppen, damit jeder Aufruf einzeln ausgeführt werden kann. Ihr Code legt auch Click-Handler inline fest. Daher würde ich Ihnen eher empfehlen, die Funktionalität von Ihrem Markup zu trennen.

Verwenden Sie jQuery

Statt Click-Handler inline zu setzen, verwenden Sie jQuery:

%Vor%

Und ähnlich für Ihre H4 . Beachten Sie, dass mein jQuery-Selektor in Ihrer Situation möglicherweise nicht geeignet ist, Sie aber bestimmte Elemente immer nach IDs oder CSS-Klassen unterscheiden können.

Trennung von Bedenken

Wenn Sie Ihre Funktionalität für das Codieren nur der Datei (oder zumindest des Codeblocks in Ihrer Seite) externalisieren, wird Ihre Seite wesentlich wartbarer.

Setzen Sie Event-Handler im DOM-Ready-Event:

%Vor%

Verbesserung der Auszeichnung

Es scheint, dass Sie eine Liste mit einigen Elementen haben (da Sie etwas mit dem Element 35 tun), wo jedes durch das Symbol% ​​co_de% und das Symbol für verschachteltes Löschen repräsentiert wird. Daher würde ich lieber Markup (und Code) ändern, um dies zu tun:

%Vor%

Formatieren Sie Ihre Elemente stattdessen mit der CSS-Datei (Trennung der Probleme erneut entweder in einer separaten CSS-Datei oder in h4 block auf Ihrer Seite) und Sie können mir dafür später danken.

%Vor%

Der Code für diese Elemente würde dann wie folgt aussehen:

%Vor%

Dies erstellt zwei gängige Klickhandler für jedes Element, das über entsprechende Datenattribute verfügen würde ( style oder data-edit-item ). Also kann Ihre Kopfzeile auch diese und einige "Edit" -Links haben. Legen Sie einfach die entsprechenden Werte für dieses bestimmte Datenattribut fest.

    
Robert Koritnik 30.01.2014 13:47
quelle
2

Es wird viel einfacher, wenn Sie jQuery verwenden, um Ihre Event-Handler zu binden. Sie müssen eine Änderung an Ihrem HTML vornehmen, damit Sie die ID (ich nehme an, die 35 ist auf jeden Fall eine ID) für diesen bestimmten Anruf identifizieren können.

%Vor%

Dann die jQuery:

%Vor%

EDIT: Vielleicht möchten Sie den Anfang des Codes in $('h4.milestonehead') ändern, je nachdem, ob all der H4-Elemente, die diese Funktionalität haben sollten, auch diese Klasse haben. Wenn sie es tun, nehmen Sie die Änderung vor. Wenn sie dies nicht tun, nehmen Sie die Änderung nicht vor (aber fügen Sie wahrscheinlich einige -Klassen hinzu, um sie von anderen H4-Elementen unterscheidbar zu machen).

    
Anthony Grist 30.01.2014 13:48
quelle
1

Zuerst prüfen Sie, was Ihr Ziel ist. In Ihrer Veranstaltung sollten Sie

ausführen %Vor%

Sie können event.target verwenden, um herauszufinden, welches Element im DOM Sie tatsächlich getroffen haben. Von hier aus können Sie diesen Wert verwenden, um zu bestimmen, ob Sie die Funktion ausführen sollen oder nicht. Wenn das Element beispielsweise "img" ist, führen Sie editFun () nicht aus!

Für etwas, das so einfach ist, ist es vielleicht besser, wenn Sie event.stopPropagation (); in Ihrer deleteFun-Funktion, da es sich um eine einfache "Entweder / Oder" -Situation handelt.

Weitere Informationen zu dieser Methode finden Sie hier: Wie Sie anhalten können Ereignis sprudelt auf Checkbox klicken

    
niaccurshi 30.01.2014 13:47
quelle
1

Sie haben die Ereignisausbreitung vergessen. Benutze dies:

%Vor%

editFun und deletefun müssen enden return false ;

    
Pinal 30.01.2014 13:48
quelle

Tags und Links