Wie funktioniert jquery-handle verschachtelten Funktionen und das timing der Ereignisse?
Gibt es ein paar Dinge, die wirklich Schwierigkeiten, mich mit Bezug darauf, wie jquery behandelt verschachtelte Funktionen (nicht zu dem Punkt, dass ich nicht schlafen kann, aber es ist immer da) und ich möchte ein jquery-Experte, konnte sich erklären, wie Dinge funktionieren, um mir das Stück des Verstandes.
Lassen Sie uns sagen, Sie haben das unter HTML-code:
<button id="first">click me first</button>
<button id="second">click me next</button>
Und den folgenden jquery-code:
$(document).ready(function() {
$('#first').click(function() {
$('#second').click(function() {
alert('test');
});
});
});
Ein Dialogfeld wird geöffnet, wenn Sie auf die first
- Taste und dann die second
- Taste.
Ich verstehe jquery instanziiert die $('#first').click()
Funktion, wenn das DOM bereit ist, und nennt es, wenn jemand Klicks auf die first
- Taste.
Jedoch, was ich bin verwirrt, ist die folgende:
[Q1] ist das $('#second').click()
Funktion auch instanziiert auf DOM-ready-oder nur, wenn $('#one').click()
genannt wird?
Nun, wenn man auf der jQuery-code gibt es nichts, was "hält uns" in der $('#first').click()
Funktion, das heißt sobald der Benutzer klickt auf den first
- Taste, die $('#second').click()
Funktion sollte instanziiert werden, und wir sollten nach dem verlassen des $('#one').click()
Funktion sofort. Jedoch nach einem Klick auf den first
- Taste, jquery muss irgendwie halten $('#second').click()
auf unbestimmte Zeit im Speicher, wenn der Benutzer klickt auf den second
- Taste.
[Q2] wie funktioniert jquery-wissen zu halten, das $('#second').click()
Funktion im Speicher, bis der Benutzer klickt auf die second
Schaltfläche nach einem Klick auf den first
button?
Schließlich sagen wir, dass Sie wollte, ändern Sie Ihren code so, dass der Benutzer musste klicken Sie auf die second
Taste innerhalb von 10 Sekunden der Klick auf den first
- Schaltfläche für das Dialogfeld angezeigt wird:
[Q3] wie würden Sie diese umsetzen, so dass Sie jQuery kennen würde, um nicht mehr Zuhören für click-events auf der second
- Taste nach 10 Sekunden?
- Ich möchte darauf hinweisen, dass Ihre Fragen sind völlig unabhängig von jQuery speichern der Tatsache, dass Sie verwendet jQuery als Beispiel. Dies ist, wie javascript funktioniert nicht mit jquery. Interessanterweise javascript ist der wichtigste tag sollten Sie Hinzugefügt haben...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Q1 - JS wird laden Sie einfach die Funktion Definitionen. Es wird nicht ausgeführt, es sei denn, Sie sind explizit ausgelöst/genannt. In diesem Fall, es wird einfach befestigen Sie den event-handler #zuerst, und warten Sie, bis jemand auf die Schaltfläche klickt, um das Ereignis ausgelöst. Damit wird die zweite Funktion hängt sich an den zweiten Knopf.
Q2 Wieder, es ist nicht von jQuery, es ist JavaScript die ganze Arbeit. Die Methode ist einfach am DOM-element und ist ausgelöst das Ereignis zugeordnet ist. JS ist wie jede Programmiersprache und halten alle Methoden und Variablen in den Speicher.
Den zweiten Klick-Funktion ist nicht wirklich angebracht, um die zweite Taste erst nach, wenn jemand Klicks auf die erste Schaltfläche. Dies ist, weil, wenn der erste button angeklickt, JS weiß zum auslösen der ersten Methode, die macht die ganze Arbeit zu befestigen, die zweite Methode auf die zweite Schaltfläche.
Q3, die Sie nutzen könnten
setTimeout
zu lösen, die Methode aus dem DOM-element.Hinweis Dies entbindet alle click-Ereignis-Handler von diesem DOM-element. Sie können auch die Bindung, die bestimmten Methode, durch die es als parameter übergeben. Überprüfen Sie heraus die API docs für die Nutzung.
setTimeout : https://developer.mozilla.org/en/DOM/window.setTimeout
Bindung : http://api.jquery.com/unbind/
unbind
Ding funktioniert nur für jQuery. Es gibt keine Möglichkeit in javascript-Ereignis-Listener entfernen. jQuery fügt einen Ereignis-listener für das native JS ein und nutzt diese zu nennen, die Sachen, die Sie Hinzugefügt haben, über.click(func)
. Wenn Sie Bindung, bist du eigentlich entfernen von jQuery, die nicht die native events.native_event<==>jquery_handler<==>real_handlers
.removeEventListner
, das ist hier die Rede : quirksmode.org/js/events_advanced.html[A1] Die zweite Funktion wird nur instanziiert, wenn
#first
geklickt wird, da es Teil der Ausführung der ersten Methode. Dies bedeutet auch, dass, wenn Sie klicken Sie auf#first
n Zeiten, die Sie bekommen sollte n Warnungen für jeden Klick auf#second
.[A2] Die Funktion ist verwurzelt durch die
#second
element. So lange dieses element ist lebendig javascript kennt behalten die Funktion um.[A3] Sie würde retten müssen Sie die Funktion Zeiger und eine
setTimeout
um es zu deaktivieren.Bessere Umsetzung ist wahrscheinlich so etwas wie:
Die Antwort zu deiner ersten Frage: ja, die zweite Taste die Bindung zum click-Ereignis nur, wenn ein Benutzer klickt auf den ersten button.
Die zweite Frage: ich bin mir nicht sicher, was Sie Fragen.
Die Dritte: Angenommen der button hat das nichts zu tun, außer Sie binden das Ereignis der zweiten Schaltfläche einmal angeklickt, können Sie eine timeout-Dokument bereit für 10 Sekunden. Nun, wenn der timer abläuft, muss die Bindung der Schaltfläche ein click-Ereignis, damit die Blockierung der zweiten Schaltfläche Ereignis. Ich denke, Sie verstehen jetzt. z.B.