Не работает селектор jQuery

#jquery

#jquery — jquery — запрос

Вопрос:

у меня возникли некоторые странные проблемы с выбором элемента с классом.
в моем случае у меня есть этот AJAX-запрос, который возвращает некоторые ссылки с тем же классом. когда я нажимаю на ссылку, должно произойти событие, но этого не произошло.

затем я попытался создать оповещение при нажатии на элемент с классом, ничего не происходит, затем я пытаюсь создать прямую ссылку на страницу с тем же классом, теперь она выдает мне оповещение..

что происходит? запрос ajax проверяет, подключен ли пользователь к Сети, и делает это каждые 1 минуту, элемент имеет класс «friend», и я пытаюсь вызвать его с помощью этого кода:

 $('.friend').click(function(){
    alert('clicked');
});
  

ничего не происходит с теми, которые отображаются в запросе ajax. но он реагирует на ссылки, размещенные непосредственно на сайте.

Комментарии:

1. об этом спрашивают пару раз каждый день. позволь мне пойти и найти простофилю.

2. Можете ли вы опубликовать свой HTML-код для элемента с классом friend?

3. чем этот пост похож на этот??

4. @Flaashing, о, это еще один вопрос, где delegate / live является ответом, а не document.ready . Запрашивается 5 раз в день.

5. Предложения на английском начинаются с заглавных букв. Пожалуйста, будьте внимательны к своему вопросу, если хотите, чтобы я проявил хоть какую-то заботу об ответе.

Ответ №1:

Попробуйте использовать live :

 $('.friend').live('live',function(){
    alert('clicked');
});
  

Он добавит этот обработчик к существующим элементам и элементам, которые будут существовать с этим селектором.

Комментарии:

1. ну, это все еще не работает:/ <класс=»друг» заголовок=»Имя» data-rowid=»2″ href=»#»> <img src=»include/user/1320783714_1955.jpg «> </a>

2. @Flaashing он работает нормально (как вы можете видеть из выбранного вами ответа [который совпадает с моим], но на него ответили позже:-P)

3. черт возьми .. я отстой в то время, ваш ответ был ofc правильным 🙂 ну, теперь это работает, мне просто пришлось кое-что изменить в коде 😉 большое спасибо, кстати, вы разбираетесь в php?

4. отлично: D возможно ли это? mysql_query(«ВЫБРАТЬ * ИЗ someTable, где somerow1 =’$var1′ И somerow2=’$var2′ ИЛИ somevar1=’$var2′ И somevar2=’$ var1′ УПОРЯДОЧИТЬ По идентификатору DESC»); ??

5. @Flaashing задайте еще один вопрос SO. ввод этого комментария немного нечитабелен ^_^

Ответ №2:

Используйте функцию live. Это намного «надежнее».

 $('.friend').live('click', function(){
    alert('clicked');
});
  

Комментарии:

1. Мне нравится идея, но не очень нравится «надежный». Это просто другой обработчик событий, ориентированный на AJAX.

Ответ №3:

Проблема в том, что click функция jQuery привязывается только к элементам, которые находятся в DOM на момент click запуска. Таким образом, ссылки, добавленные вашим ajax вызовом, приходят позже и, следовательно, пропускают это. Для jQuery < 1.7 используйте live для сценария такого типа

 $('.friend').live('click', function(){
    alert('clicked');
});
  

Для jQuery 1.7 и выше используйте новый унифицированный on синтаксис

 $(document).on('click', '.friend', function(){
    alert('clicked');
});
  

Комментарии:

1. on не будет выполняться делегирование события, если не указан параметр селектора. Попробуйте, $(document.body).on('click', '.friend'...) если нужно, но по сути это то же самое, что и live на тот момент, так что вы могли бы просто использовать live .

2. @zzzzBov да, вы правы. Все еще приспосабливаюсь к новому синтаксису

3. я тоже. Я прочитал документы на on около 10 раз, и мне все еще нужно ссылаться на них каждый раз, когда это упоминается.