jquery .klicken Sie auf wird mehrfach aufgerufen
Ich bin immer unerwartete Ergebnisse mit jQuery versucht, in der "auf" - Methode von div. Bitte sehen dieses jsfiddle. Werden Sie sicher, dass Sie zum öffnen der Konsole-Fenster. Klicken Sie auf das Wort ein paar mal und beobachten Sie die Ausgabe in der Konsole. Klicken Sie auf die Funktion wird mehrfach aufgerufen, wenn es sollte nur einmal aufgerufen werden.
Den auskommentierten code am Ende ganz gut funktioniert. Mache ich etwas falsch? Ich bin neu bei jQuery.
Hier der code:
function toggleDiv(status)
{
console.log("toggleDiv(" + status + ")");
if (status) {
$("#test").html("Goodbye");
}
else {
$("#test").html("Hello");
}
$("#test").click(function() {
toggleDiv(!status);
});
//Non-jquery method works fine....
//document.getElementById("test").onclick = function () {
// toggleDiv(!status);
//}
}
Update: wie es aussieht gibt es viele Möglichkeiten, die Haut dieser Katze. Das eigentliche Problem hier war mein nicht zu verstehen, dass die jQuery - "Klick" - Funktionen FÜGT eine weitere handler. Ich dachte, es ERSETZT die aktuelle hf.
InformationsquelleAutor Johnny Mopp | 2012-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Legen Sie eine neue
.click()
- Event-Handler jedes mal, wenn Sie halten Sie es (was wiederum zu noch mehr Veranstaltungen). On a side note, versuchen Sie nicht, verwenden Sieonclick /onmouseover /onmouseout /etc
Ereignisse auf DOM-Elemente. Im Internet explorer diese erstellen Skript-Blöcke (dass können Sie sehen, wenn Sie Visual Studio verwenden. Seiten mit tausenden von diese verlangsamen die Leistung enorm!Es sieht aus wie Sie versuchen, dies zu erreichen:
jsFiddle DEMO
Wenn Sie nur ändern möchten, die text, den Sie nehmen sollten einen Blick auf meine Antwort brauchst du nicht zu verwenden .Daten() auf alle
Warum mischst du $("#test") und $(this) ?
Ach, ich werde Bearbeiten, dass die OP hatte $("#test") Referenzen! Jetzt wechseln
du hast Links einen zusätzlichen Aufruf
.data()
im ternären operator. Other than, die das ist eine große Verbesserung gegenüber Ihrer ursprünglichen code.InformationsquelleAutor Mark Pieszak - DevHelp.Online
Du bist re-Registrierung der
click
- handler über und über rekursiv.Einer richtigen Lösung (von vielen möglichen Varianten) ist dieser:
dann müssen Sie entfernen den
onclick
- Attribut aus dem HTML - es ist nicht gut zu mischen DOM0 und DOM3 event-handling.Sehen http://jsfiddle.net/alnitak/8aBxp/
Danke. Dies funktioniert auch, aber ich denke, mcpDESIGNS Antwort passt meine Bedürfnisse besser.
InformationsquelleAutor Alnitak
Die jQuery-Klick-Funktion nicht überschreiben eines vorherigen click-handler, sondern fügt die neue ein in eine Warteschlange. Also, wenn Sie klicken Sie erneut aufgerufen, einen neuen click-handler Hinzugefügt wird, zusammen mit all den alten.
Um dies zu verhindern, müssen Sie nur deaktivieren Sie das alte Handler definieren, bevor Sie Ihre neue.
Möglicherweise möchten Sie auch zu schauen, der .toggle () - event-handler.
UPDATE: klarer Zu werden über
.toggle()
wird dies auch tun, was Sie wollen:Ich fügte hinzu, ein update mit einem code-Beispiel, das sollte dir helfen.
InformationsquelleAutor Joseph Erickson
Wahrscheinlich sind Sie ausgeführt
toggleDiv
mehrere Male, wodurch das click-event gebunden wird, mehrere Male. Binden Sie das click-Ereignis außerhalb dertoggleDiv
Funktion.InformationsquelleAutor Kevin B
Sollten Sie binden die
click
Ereignis außerhalb dertoggleDiv
Funktion. Der aktuelle code wird die Registrierung neuerclick
event-handler jedes mal, wenn die Elemente in$('#test')
geklickt wird, wird mit exponentiellem Wachstum (da alle vorherigenclick
handler generiert eine neueclick
- handler, so dass die Anzahl der Handler verdoppeln sich bei jedem Klick).Ich habe über die Konsole. Die Anzahl der Zeiten, die toggleDiv aufgerufen wird (dies ist gleich der Anzahl der Male click-Ereignis registriert ist) verdoppelt sich alle auf.
ah ja, so ist es nicht. Entschuldigung.
InformationsquelleAutor nhahtdh
Nach Ihr, wenn Sie sind das hinzufügen ein weiteres click-Ereignis zu
#test
. Es ruft alle click-Handler, wenn es angeklickt wird. Sie wahrscheinlich nicht brauchen, daonclick
ist definiert in der html.InformationsquelleAutor Corey Ogburn
Die sauberste Lösung wäre diese:
http://jsfiddle.net/kannix/fkMf9/4/
InformationsquelleAutor kannix
Das gleiche problem war mit mir passiert . Joseph Erickson Antwort, unbind() funktioniert.
Falls es hilft , hier ist die Zusammenfassung, wie onclick-Ereignis endete, rief mehrere Male in meinem code :
Löste ich dieses als pro-Anregung gegeben durch Joseph Erickson. Innerhalb der AJAX-callback, Tue ich dies nun :
$(".msgLinkDiv").unbind();
(".msgLinkDiv").klicken Sie(function(e){mache meine Sachen});
InformationsquelleAutor Binita Bharati