JQuery trigger не запускается с bind() или on() для пользовательских событий

Может ли кто-нибудь сказать мне, почему этот код не работает?

$('body').on('test', function() {
  alert('test');
});

$('body').trigger('test');

Я использую jquery-1.7.2.min. Я не получаю никаких ошибок, просто ничего не происходит.

Я попытался поместить код внутри встроенного script внутри $(document).ready() и все равно ничего. Я также пробовал как on(), так и bind(), и не получил результата. Я вижу примеры на всем протяжении, демонстрируя один и тот же синтаксис, так что же отличается от этого?

Ответ 1

Похоже, проблема в том, что DOM как-то готов. Размещение кода внутри встроенного скрипта не будет работать. Размещение его внутри $(document).ready() будет работать с анонимной функцией, но по какой-то причине не вызывать функцию с помощью()). Этот код сработал

$(document).ready(start);
function start(){
$('body').on('test', function() {
  alert('test');
});

$('body').trigger('test');
}

Но этого не произошло... * обратите внимание на скобки вызова функции.

$(document).ready(start());
function start(){
$('body').on('test', function() {
  alert('test');
});

$('body').trigger('test');
}

Точный пример работает в обоих направлениях на jsfiddle, но по некоторым причинам на моем сервере работает только один способ. Что, я думаю, поднимает другой вопрос, почему, но, по крайней мере, мы можем видеть, что этот код действительно работает, есть некоторая странная аномалия с моими вещами:/

Ответ 2

Попробуйте делегировать:

$(document).on('test', 'body', function() {
  alert('test');
});

$('body').trigger('test');

Это работает как live(). http://api.jquery.com/live/