Пользовательские мероприятия JQUERY, выстрел в одно место, но не другое

StackOverflow https://stackoverflow.com/questions/4330427

Вопрос

Вероятно, это просто мое собственное невежество о том, как работают события, но кто -то может объяснить это: пользовательское событие не будет стрелять в верхнюю часть функции, но будет стрелять в обратный вызов внутри этой функции.

Следующие работы (Custom Event Fires):

function foo() {

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

}

foo();

Следующее не работает (пользовательское событие не стреляет):

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

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

}

foo();

Привязка события следующим образом:

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

Я действительно хочу, чтобы он стрелял прямо в верхней части функции. Любая помощь больше всего ценится!

Примечание. Это та же проблема в браузерах, а также с дополнительным аргументом данных или без него.

Это было полезно?

Решение

Тот факт, что он работает в асинхронном обратном вызове, заставляет меня поверить в это, когда foo (); называется, фактическое обязательство не произошло. Вы должны быть осторожны с порядок вещей, когда вы делаете это.

Ответ JWwishart, вероятно, работает, потому что сначала он обязателен ... затем звонит Фу. Если вы опубликуете весь код с заказом того, где что -то происходит, хотя это может быть легче отладить.

Другие советы

data Похоже, не определен во втором (неработающем) методе.

Когда я определяю data, это работает, как и ожидалось.

Следующее работает ...?

Я только связал «обычай» даже, я удалил двух других (чтобы сделать вещи максимально простыми.)

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


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

foo();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top