Селектор jquery перестает работать после загрузки () - PullRequest
3 голосов
/ 10 января 2011

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 10 января 2011

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

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

Как отмечает Патрик Д.В., если возможно, предпочтительным является delegate.

3 голосов
/ 10 января 2011

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

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

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

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

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

...