Пользовательское событие JQuery запускается в одном месте, но не в другом - PullRequest
0 голосов
/ 02 декабря 2010

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

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

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 ) {
    ...
});

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

ПРИМЕЧАНИЕ. Это одинаковая проблема во всех браузерах, с дополнительным аргументом данных или без него.

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

data кажется неопределенным в вашем втором (нерабочем) методе.

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

1 голос
/ 02 декабря 2010

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

jwwishart ответ, вероятно, работает, потому что он сначала связывается ... затем вызывает foo. Если вы разместите весь код в порядке, в котором все происходит, возможно, отладка будет проще.

0 голосов
/ 02 декабря 2010

следующие работы ...?

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

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


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

foo();
...