2013-06-19 2 views
0

Я пытаюсь использовать пользовательские события jQuery. При загрузке DOM я связываю body с настраиваемым событием test с использованием $.on(). Сразу после этого я запускаю это событие, и все работает так, как планировалось. Однако в любой другой момент, когда я запускаю событие (при обратном вызове, с консоли и т. Д.), Ничего не происходит. Я написал jsfiddle, чтобы проиллюстрировать эту ситуацию. Есть идеи?Пользовательские события в jQuery

$(function(){ 
    $('body').on('test', function(){ 
     alert('test triggered'); 
    }); 
    $('body').on('click', '.btn', triggerTest); 
    $('body').trigger('test');  
}); 

var triggerTest = function(){ 
    $('body').trigger('test'); 
} 

http://jsfiddle.net/vgEzD/

+1

Нажатие на якорь вызывает ошибку: 'TypeError: handleObj.handler.apply не является функцией'. Проблема в том, что на данный момент вы пытаетесь привязать обработчик событий к якорю, 'triggerTest' еще не инициализирован. Если я изменю настройку скрипта, чтобы включить код в 'head' документа, он отлично работает: http://jsfiddle.net/vgEzD/2/. Зачем? Потому что прямо сейчас вы выполняете весь код, когда DOM загружается, то есть обратный вызов, который вы передаете '.ready', выполняется * немедленно *, прежде чем назначить значение' triggerTest'. –

ответ

2

Ваш заказ является неправильным. Это работает:

var triggerTest = function(){ 
    $('body').trigger('test'); 
} 

$(function(){ 
    $('body').on('test', function(){ 
     alert('test triggered'); 
    }); 
    $('body').on('click', '.btn', triggerTest); 
    $('body').trigger('test');  
}); 

Живая демонстрация:http://jsfiddle.net/simevidas/vgEzD/3/

Видимо JQuery выполняет DOM готовый обработчик сразу и в этой точке, функция triggerTest еще не назначен. Итак, вы хотите создать глобальные переменные, сделайте это над готовым обработчиком.

Btw, в вашем jsFiddle, выполняется «onLoad». Это означает, что код JavaScript выполняется в окне «load», и в этот момент DOM готов уже произошел, поэтому jQuery выполняет код немедленно.

+0

Спасибо за помощь. Ответ решает эту ситуацию, но не моя точная проблема. Я задал несколько более конкретный вопрос: http://stackoverflow.com/questions/17203116/jquery-trigger-custom-event – JJK

Смежные вопросы