Ich habe eine einfache Tabelle :
Der TR hat <tr onclick='alert("row");'>
Und der Knopf hat:
%Vor% Allerdings - Obwohl ich e.stopPropagation();
geschrieben habe, warnt es immer noch: "row, button".
Nun weiß ich, dass der Event-Handler an die body
angehängt ist und der Selektor dagegen angeklickt ist (der Klick beginnt an der Schaltfläche und bewegt sich zum Body, genau wie $.live
, aber gegen document
...).
Aber die Überprüfung sollte für den button
Klick und nicht für den TR
Klick sein.
Es scheint so, als würde ich während des Klickens auf das "body"
(weil ich den Event-Handler angehängt habe) und auf dem Weg zum Body propagieren und den Klick auf% aktivieren co_de%.
Was ist hier los? Wie kann ich meinen Code behalten (an Körper anhängen) und habe immer noch nur Alarm von "Knopf".
Ich weiß, ich kann einfach tun:
%Vor%aber ich möchte wissen, warum mein aktueller (!) Code nicht funktioniert.
Das Problem besteht darin, dass Sie den Ereignishandler mit body
verknüpfen, selbst wenn er an das Element .b
delegiert wird. Dieser Ereignishandler wird nur aufgerufen, nachdem der Ereignishandler tr
aufgerufen wurde. Daher ist es zu spät, die Weitergabe zu stoppen.
Da Sie vermutlich mit dynamisch hinzugefügten Elementen arbeiten und den Event-Handler nicht einfach an td
binden können, kann ich Ihnen folgendes vorschlagen:
... aber ich möchte wissen, warum mein aktueller (!) Code nicht funktioniert.
Von jQuery-Dokumenten aus auf event.stopPropagation
mit Ereignisdelegierung:
Da die .live () -Methode Ereignisse verarbeitet, nachdem sie weitergegeben wurden Im oberen Teil des Dokuments ist es nicht möglich, die Verbreitung von zu stoppen Live-Events. In ähnlicher Weise werden Ereignisse, die von .delegate () behandelt werden, weitergegeben zu den Elementen, an die sie delegiert sind; Ereignishandler gebunden Alle Elemente darunter im DOM-Baum wurden bereits ausgeführt zu dem Zeitpunkt, zu dem der delegierte Ereignishandler aufgerufen wird. Diese Handler, kann daher verhindern, dass der delegierte Handler ausgelöst wird Aufruf event.stopPropagation () oder Rückgabe false.
live
und delegate
sind jetzt on
, dies gilt also.
Vielleicht fügen Sie einfach die Ereignisbehandlung auf der Schaltfläche an (auch wenn inline javascript
an <tr>
angehängt ist) -
ODER -
Anstatt das inline
-Ereignis in <tr>
anzugeben, können Sie
Tags und Links javascript jquery