jQuery déclencheur d'événement personnalisé de façon synchrone?
Je suis à l'aide de jQuery déclencher la méthode à appeler un événement... mais il se comporte de façon incohérente. Parfois, il appel le cas, parfois ça ne marche pas.
<a href="#" onclick="
$(this).trigger('custom-event');
window.location.href = 'url';
return false;
">text</a>
La custom-event
a beaucoup d'auditeurs ajouté.
C'est comme si le déclencheur méthode n'est pas synchrone, permettant à la window.location.href
être changé avant d'exécuter les événements. Et lorsque la fenêtre.emplacement.href changé de navigation se produit, interrompant tout.
Comment puis-je déclencher des événements de manière synchrone?
À l'aide de jQuery 1.8.1.
Merci!
MODIFIER
J'ai trouvé que l'événement, lorsqu'on a une trace de la pile comme ceci:
- jQuery.fx.tique (jquery-1.8.1.js:9021)
- tique (jquery-1.8.1.js:8499)
- jQuery.Les rappels.auto.fireWith (jquery-1.8.1.js:1082)
- jQuery.Les rappels.feu (jquery-1.8.1.js:974)
- jQuery.vitesse.opt.complet (jquery-1.8.1.js:8991)
- $.customEvent (myfile.js:28)
Cela prouve que jQuery trigger
méthode est asynchrone. (j'ai eu tort... cela prouve seulement que l'événement que j'étais d'appel, avait une animation à l'intérieur, et a été l'appel de la fonction prévue à l'intérieur de la fonction de rappel après l'animation)
OriginalL'auteur Miguel Angelo | 2012-11-12
Vous devez vous connecter pour publier un commentaire.
Vous, mon ami, sont à la recherche pour jQuery "quand".
http://api.jquery.com/jQuery.when/
Se forcer à être synchrone, vous pouvez utiliser quelque chose comme cela....
trigger
docs ne rien dire à propos de ce comportement différé... même si c'est juste un petit retard, parfois, peut provoquer de gros problèmes.En fait je me suis trompé...
trigger
est sychronous... le problème est qu'il y a un effet en cours d'exécution à l'intérieur de l'événement qui se déclenche, et la méthode a été appelée à l'intérieur de la fonction de rappel.Le gestionnaire doit retourner une Promesse 😉
En fait non. api.jquery.com/trigger, montre que jQuery.trigger() retourne l'objet jQuery en question, c'est à dire $(this); Il est, autant que je peux dire, aucun moyen de retour d'une Promesse de l'événement de déclenchement d'appel.
"Si un seul argument est passé à
jQuery.when
et il n'est pas un report ou une Promesse, il sera considéré comme résolu Reportés et tout doneCallbacks joint sera exécuté immédiatement."trigger
ne pas de retour.OriginalL'auteur Trent
Lire la documentation sur triggerHandler:
Ce point dans la documentation permettez-moi de penser qu'un code comme ceci:
serait de répondre à vos exigences.
Voir http://api.jquery.com/triggerHandler/
Pouvez-vous l'utiliser pour déclencher le gestionnaire d'un événement appartenant à une iFrame? En d'autres termes, puis-je avoir iFrames communiquer de façon synchrone, et à l'empêcher de code en cours de traitement jusqu'à ce que la réponse est de retour?
Je suis assez sûr que javascript ne peut pas communiquer facilement avec les iframe. Jetez un oeil à serviceWorker (developer.mozilla.org/en-US/docs/Web/API/ServiceWorker) pour l'inter-trame de communication... Ou de manipuler le hachage de l'iFrame et de regarder le hachage être modifiée à l'arrière de l'iframe. Ou, optez pour un plugin de navigateur... de toute façon, autant que je sache, pas de solution facile...
OriginalL'auteur jehon