Javascript setTimeout appel de fonction avec l'argument d'événement?
Quelle est la meilleure façon de s'en sortir dans le cas de l'objet lors de l'utilisation de setTimeout? J'utilise jQuery pour gérer les normaliser le modèle d'événements dans tous les navigateurs, mais je ne suis pas sûr de savoir comment obtenir le 'e' de l'objet dans le checkPos fonction.
Mon code actuel:
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);
}
Actuellement que le code fonctionne à la fois parce que la fonction est appelée dans l'événement mousedown, mais jamais les mises à jour de l'e de l'objet que l'utilisateur déplace la souris. Le FF javascript console d'erreur déclare également qu'il est " inutile appel de setTimeout (il manque des guillemets autour de l'argument?)', mais en suivant les conseils des causes il à complètement échouer.
Comment puis-je tirer dans le 'e' argument d'événement à partir d'un appel de setTimeout?
Edit: Ajouté dans le code que les rediffusions de la checkPos fonction toutes les 500ms
checkPos
lors de l'appel de setTimeout
(en raison de l'invocation de la fonction de l'opérateur ()
) et le passage de sa valeur de retour de setTimeout
; cette valeur n'est probablement pas une référence à une fonction, donc setTimeout
échoue.OriginalL'auteur C Bauer | 2010-11-30
Vous devez vous connecter pour publier un commentaire.
Tout d'abord pourquoi êtes-vous à l'aide de deux délais d'attente? Il me semble que setInterval() serait mieux
Deuxièmement, pourriez-vous préciser ceci : "...mais jamais de mises à jour de l'e de l'objet que l'utilisateur déplace la souris." Pourquoi l'objet d'événement d'être mis à jour lorsque l'utilisateur déplace la souris? Vous n'avez assigné un mouseDown gestionnaire. Si tu voulais faire quelque chose sur chaque déplacement de la souris, alors vous devriez utiliser un événement mouseMove, auquel cas le délai d'attente /intervalle serait inutile de toute façon.
Comme toujours en JavaScript, vous devriez regarder pour un événement piloté par la solution première et la seule utilisation chronométré gestionnaires lorsque vous devez absolument.
*Modifier - aborder les questions op soulevées dans les commentaires *
OriginalL'auteur Ollie Edwards
Essayer:
MODIFIER en raison de l'OP commentaires..
D'avoir accès à un événement de mise à jour à chaque fois checkPos est déclenché:
Il ne fonctionnera pas avec votre édité code. Cette méthode constitue une "fermeture" sur
e
. Pour accéder à un événement de mise à jour, vous avez besoin de stocker l'événement à un endroit accessible à l'checkPos
fonction (externes), et le mettre à jour stockées événement dans leMouseDownEvent
fonction.Il n'y a aucun moyen d'appeler l'événement objet en javascript ou jQuery que j'ai tirer sur la position actuelle de la souris basé sur le délai d'attente?
Bauer: édité. Je ne sais pas "mieux".
Bauer peut-être il serait utile si vous l'avez expliqué pourquoi vous devez utiliser un timeout. Javascript est un événement MouseMove pour l'interrogation de la position de la souris, donc je ne vois pas pourquoi vous voulez utiliser un timeout. Voir ma réponse plus.
OriginalL'auteur sje397
Vous pouvez utiliser un curry de fonction, il y en a pour jQuery ici.
Généralement, vous avez ceci:
de sorte que vous pouvez faire:
Depuis curry retourne une fonction, c'est le premier argument lié à e, vous pouvez passer directement dans setTimeout.
OriginalL'auteur Douglas
Aussi loin que je pouvais voir, c'est à dire de ne pas laisser passer les "événements" de l'objet autour comme vous avez besoin.
La seule solution je pense est de stocker la valeur que vous avez besoin à l'avance en tant que variable globale, puis vérifier que les variables dans le retard de la fonction.
Par exemple: http://jsfiddle.net/YvYtn/1/
Cela permettra de montrer la dernière position X, vous pouvez stocker tout ce que vous besoin de l'objet d'événement.
Le code JS:
OriginalL'auteur Shadow Wizard