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

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

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

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

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

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

 Coty Embry22 мар. 2018 г., 17:02
Я добавлю для моего экземпляра, убедитесь, что JQuery включен дважды (объект JQuery, когда.on зарегистрирован должен быть таким же объектом jquery (т.е.$) когда.trigger называется иначе, если другой$ экземпляр загружается позже, он в значительной степени удалит исходные обратные вызовы, которые были установлены, когда первый$ jquery объект был использован. старый / оригинальный объект jquery будет удален, а новый $) займет место первого (а слушатели событий уйдут)
 Prasenjit Kumar Nag04 июн. 2012 г., 19:04
Здесь все работает хорошо, Jsfiddle.net / joycse06 / XXXhQ
 Jeff04 июн. 2012 г., 19:32
alert (jQuery.fn.jquery); проверит вашу версию или предупреждение (typeof jQuery.fn.on); чтобы подтвердить, что функция существует.
 mprabhat04 июн. 2012 г., 19:07
yeah ваш синтаксис работает с пользовательским событием
 IamFace04 июн. 2012 г., 19:11
Странно .. Все эти примеры работают, но на моей странице это не так. Я только что обновил свой jQuery с 1.6.4 до 1.7.2 этим утром, может быть, есть какая-то проблема с кэшем на моем сервере? Я понимаюon() не было реализовано до 1.7

Ответы на вопрос(2)

Решение Вопроса

проблема в том, что 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, но по какой-то причине на моем сервере работает только один способ. Что, я думаю, поднимает другой вопрос, почему, но, по крайней мере, мы видим, что этот код действительно работает, есть некоторая странная аномалия с моими вещами: /

 rf_wilson11 июл. 2013 г., 10:25
Спасибо, это сработало и для меня. Добавление готового документа вокруг "on" декларации сработало!
 Jeff04 июн. 2012 г., 21:31
Это потому, что ты семантически неверен. start () передаст возвращаемое значение вашей функции запуска. Принимая во внимание, что запуск пройдет функцию, которая будет выполнена, когда документ будет готов. Обычно люди передают анонимные функции: $ (function () {/ * мои вещи здесь * /});
 Chris2210 янв. 2013 г., 20:09
@ Джефф +1 спасибо

Попробуйте делегацию:

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

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

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

 Jeff04 июн. 2012 г., 19:13
Это пользовательское событие, и вы правы, его код ДОЛЖЕН работать, я просто знаю из опыта, что иногда проще связать события таким образом (даже пользовательские события), чем прямое связывание. Из документов: обработчики событий связаны только с выбранными в данный момент элементами; они должны существовать на странице в тот момент, когда ваш код вызывает .on (). Конечно, тело должно существовать, но что-то странное происходит в их ситуации, которую мы не видим, это преодолеет это. (В теории). ;)
 thecodeparadox04 июн. 2012 г., 19:10
Вы код не отражает то, что хочет ОП. Проблема ОП - не делегат, а пользовательское событие

Ваш ответ на вопрос