Tir sur mesure des événements JQuery en un seul endroit, mais pas un autre
-
30-09-2019 - |
Question
Ceci est probablement ma propre ignorance de la façon dont le travail des événements, mais quelqu'un peut-il expliquer cela. Un événement personnalisé ne sera pas le feu au sommet d'une fonction, mais le feu dans un rappel dans cette fonction
Les travaux suivants (les feux d'événements personnalisés):
function foo() {
$.ajax( ... , function() {
$.event.trigger("custom" , data );
});
}
foo();
Ce qui suit ne fonctionne pas (l'événement personnalisé ne se déclenche pas):
function foo() {
$.event.trigger("custom" , data );
$.ajax( ... , function() {
...
});
}
foo();
L'événement de liaison est la suivante:
$(document).bind("custom custom1 custom2" , function( event, data ) {
...
});
Je veux vraiment à feu tout en haut de la fonction. Toute aide est la plus appréciée!
NOTE:. Il est le même problème dans les navigateurs, et avec ou sans l'argument supplémentaire de données
La solution
Le fait que cela fonctionne dans les fils de rappel async me faire croire que lorsque foo (); est appelé, la liaison réelle n'a pas eu lieu. Vous devez faire attention à l'ordre des choses quand vous faites cela.
La réponse de jwwishart fonctionne probablement parce qu'il est contraignant d'abord ... puis appeler foo. Si vous publiez le code entier avec l'ordre où les choses se passent bien, il pourrait être plus facile à déboguer.
Autres conseils
data
semble être non défini dans votre deuxième méthode (non-travail).
Quand je définis data
, cela fonctionne comme prévu.
Les travaux suivants ...?
Je ne lié la « coutume » même, je l'ai enlevé les deux autres (pour faire avancer les choses aussi simples que possible.)
$(document).bind("custom" , function( event, data ) {
alert(data);
});
function foo() {
$.event.trigger("custom" , "Works" );
}
foo();