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

Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top