Javascript setTimeout-Funktion rufen Sie mit Ereignis-argument?
Was ist der beste Weg, um zu ziehen in das event-Objekt bei der Verwendung von setTimeout? Ich bin mit jQuery zu behandeln, normalisieren das event-Modell in allen Browsern, aber ich bin mir nicht sicher, wie man die 'e' - Objekt in der Funktion checkPos.
Mein Aktueller code:
function MouseDownEvent(e) {
*snip*
timeoutID = setTimeout(checkPos(e), 500);
}
function checkPos(e) {
//function uses e on a timeout of 500ms
timeoutID = setTimeout( checkPos(e) }, 500);
}
Derzeit, dass code, der einmal funktioniert hat, weil die Funktion aufgerufen wird im mousedown-Ereignis, aber nie updates der e-Objekt, wie der Benutzer die Maus bewegt. Die FF-javascript-Fehler-Konsole auch erklärt, dass es ein nutzlos setTimeout call (missing quotes around argument?)', aber diesem Rat Folgen, bewirkt, dass es komplett ausfallen.
Wie kann ich Sie in die 'e' - Ereignis-argument aus einer setTimeout-Aufruf?
Edit: Hinzugefügt in den code, der wiederholt den checkPos-Funktion, die alle 500 MS
- Mit Ihrem code, bist du eigentlich aufrufen
checkPos
beim AufrufsetTimeout
(aufgrund der Funktions-Aufruf-operator()
) und übergeben der RückgabewertsetTimeout
; dieser Wert ist wahrscheinlich nicht eine Referenz auf eine Funktion, sosetTimeout
ausfällt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, warum sind Sie mit zwei timeouts? Es sieht für mich wie setInterval() wäre besser
Zweitens könnten Sie bitte klären Sie dies : "...aber nie updates der e-Objekt, wie der Benutzer die Maus bewegt." Warum sollte das event-Objekt werden aktualisiert, wenn der Benutzer die Maus bewegt? Sie haben nur ein mouseDown-handler zugewiesen. Wenn Sie das tun wollten etwas, das auf jede Maus bewegen, dann sollten Sie ein mouseMove-Ereignis, in diesem Fall die timeout-Intervall wäre unnötig sowieso.
Wie immer in JavaScript sollten Sie sich für eine ereignisgesteuerte Lösung zuerst und verwenden Sie nur zeitlich Handler, wenn Sie absolut müssen.
*Bearbeiten - Fragen op aufgewachsen in Kommentare *
Versuchen:
BEARBEITEN wegen OP Kommentare..
Haben Zugriff auf eine aktualisierte Ereignis jedes mal checkPos ausgelöst wird:
e
. Für den Zugriff auf eine aktualisierte Fall müssen Sie das Ereignis speichern irgendwo zugänglich ist, um diecheckPos
- Funktion (externe), und aktualisieren Sie die gespeicherte Ereignis in derMouseDownEvent
Funktion.myNamespace.mousePos
oder somesuch, und dann haben Sie Ihre Funktion, die aufgerufen wird, die auf einem timer...bessersetInterval
zu.Könnte man eine curry-Funktion, es ist eine für jQuery hier.
In der Regel, müssten Sie diese:
damit Sie tun könnten:
Da curry gibt eine Funktion mit der es erste argument gebunden e, übergeben Sie es direkt in setTimeout.
Soweit ich sehen konnte, IE wird nicht zulassen, dass durch die "event" - Objekt um, wie Sie benötigen.
Die einzige Lösung die mir einfällt, ist die Speicherung, was auch immer Wert müssen Sie im Voraus als Globale variable dann prüfen, ob die variable in der verzögerten Funktion.
Beispiel: http://jsfiddle.net/YvYtn/1/
Wird dies zeigen die letzten X-position, die Sie speichern können, was Sie brauchen aus dem event-Objekt.
Den JS code: