#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 раз, и мне все еще нужно ссылаться на них каждый раз, когда это упоминается.