2010-07-13 2 views
1

У меня есть модуль А Javascript следующий Javascript:События на элементах DOM еще не созданы, в Javascript?

EntryController = function$entry(args) { 

    MainView(); 

    $('#target').click(function() { 
     alert('Handler called!'); 
    }); 

} 

MainView() имеет обратный вызов, который создает кнопку #target. Из-за обратного вызова код заберет и пропустит оставшуюся часть кода $ ('# target') ... до создания #target. Если это так, событие никогда не подключается к #target. Если я поставлю точку останова в $ ('# target'), которая даст обратный вызов достаточно времени, чтобы вернуться и построить #target, когда я нажимаю кнопку воспроизведения, все работает так, как ожидалось.

Каков наилучший способ справиться с этим? Я хотел бы, чтобы все события проходили в контроллере, чтобы он мог выбрать, к какому виду отправить его.

Я думал о размещении всего $ ('# target'). Щелкните ... внутри MainView() и вместо alert ('Handler called!'); Я бы разместил ссылки на EntryController.TargetEventRaise(), но это начало выглядеть немного как устойчивый код. Каков наилучший способ приблизиться к этому?

ответ

2

Вы ищете jQuery's live event handlers, который будет обрабатывать событие на каждый элемент, который соответствует селектору, независимо от того, когда был создан элемент.

Например:

$('#target').live('click', function() { 
    alert('Handler called!'); 
}); 

В качестве альтернативы, вы могли бы сделать сам MainView функции взять функцию обратного вызова, а также добавить обработчик в функции обратного вызова. Затем вы можете вызвать обратный вызов в MainView внутри своего обратного вызова.

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