Domanda

Questo è probabilmente solo la mia ignoranza di come gli eventi di lavoro, ma qualcuno può spiegare questo:. Un evento personalizzato non si attiverà nella parte superiore di una funzione, ma si attiverà in un callback all'interno di quella funzione

Le seguenti opere (l'evento personalizzato):

function foo() {

    $.ajax( ... , function() {
            $.event.trigger("custom" , data );
    });

}

foo();

Sono esclusi funziona (l'evento personalizzato non fa fuoco):

function foo() {
    $.event.trigger("custom" , data );

    $.ajax( ... , function() {
            ...
    });

}

foo();

L'evento di legame è la seguente:

$(document).bind("custom custom1 custom2" , function( event, data ) {
    ...
});

Ci tengo a fuoco proprio in cima della funzione. Ogni aiuto è più apprezzato!

. NOTA: E 'lo stesso problema tutti i browser, e con o senza l'argomento dati aggiuntivi

È stato utile?

Soluzione

Il fatto che funziona nelle asincrona richiamata mi porta a credere che quando foo (); è chiamata, il legame effettivo non ha avuto luogo. È necessario essere attenti a l'ordine delle cose quando si esegue questa operazione.

La risposta di jwwishart probabilmente funziona perché è vincolante prima ... quindi chiamando foo. Se pubblichi l'intero codice con l'ordine del luogo in cui le cose accadono anche se potrebbe essere più facile per eseguire il debug.

Altri suggerimenti

data sembra essere non definito nel secondo metodo (non funzionante).

Quando mi definisco data, funziona come previsto.

I seguenti opere ...?

Ho solo legato il "personalizzato", anche, ho tolto le altre due (per ottenere le cose più semplice possibile.)

$(document).bind("custom" , function( event, data ) {
    alert(data);
});


function foo() {
    $.event.trigger("custom" , "Works" );
}

foo();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top