Селектор jquery перестает работать после load()

Короче говоря, у меня есть страница, на которой содержимое загружается с помощью jquery load(). проблема в том, что я пытаюсь выбрать.

$('a.selected_class').click(function(e){
 alert('alert');
 e.preventDefault();
});

(внутри готового документа) работает на первой странице, но на любых последующих страницах (которые загружаются с помощью $(this).load(url); в div) селектор перестает работать.

какие-нибудь советы?


person psolms    schedule 10.01.2011    source источник


Ответы (2)


Дело не в том, что он перестает работать. Дело в том, что он привязывает обработчики click только к тем элементам, которые существуют при его запуске (при загрузке страницы).

Вы можете разместить обработчик .delegate() на <div>, в который загружаются динамические.

$('#mydiv').delegate('a.selected_class','click',function(e){
   alert('alert');
   e.preventDefault();
});

Обработчик размещается на элементе #mydiv, и когда к нему всплывает событие click, он проверяет, произошло ли событие с элементом, соответствующим a.selected_class.

Метод .live() делает то же самое, но для всего документа, поэтому его обычно не рекомендуется использовать.

person user113716    schedule 10.01.2011

click() будет работать только с элементами, существующими на странице в данный момент. Ознакомьтесь с live и delegate. С live:

$('a.selected_class').live("click", function(e){
 alert('alert');
 e.preventDefault();
});

Как упоминает patrick dw, delegate предпочтительнее, если это возможно.

person Andrew Whitaker    schedule 10.01.2011