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

11

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

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

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

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

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

yeah ваш синтаксис работает с пользовательским событием mprabhat
Я добавлю для моего экземпляра, убедитесь, что JQuery включен дважды (объект JQuery, когда.on зарегистрирован должен быть таким же объектом jquery (т.е.$) когда.trigger называется иначе, если другой$ экземпляр загружается позже, он в значительной степени удалит исходные обратные вызовы, которые были установлены, когда первый$ jquery объект был использован. старый / оригинальный объект jquery будет удален, а новый $) займет место первого (а слушатели событий уйдут) Coty Embry
Странно .. Все эти примеры работают, но на моей странице это не так. Я только что обновил свой jQuery с 1.6.4 до 1.7.2 этим утром, может быть, есть какая-то проблема с кэшем на моем сервере? Я понимаюon() не было реализовано до 1.7 IamFace
Здесь все работает хорошо, Jsfiddle.net / joycse06 / XXXhQ Prasenjit Kumar Nag
alert (jQuery.fn.jquery); проверит вашу версию или предупреждение (typeof jQuery.fn.on); чтобы подтвердить, что функция существует. Jeff

Ваш Ответ

2   ответа
8

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

Это потому, что ты семантически неверен. start () передаст возвращаемое значение вашей функции запуска. Принимая во внимание, что запуск пройдет функцию, которая будет выполнена, когда документ будет готов. Обычно люди передают анонимные функции: $ (function () {/ * мои вещи здесь * /}); Jeff
@ Джефф +1 спасибо Chris22
Спасибо, это сработало и для меня. Добавление готового документа вокруг "on" декларации сработало! rf_wilson
1

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

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

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

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

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

Похожие вопросы