#jquery
#jquery — jquery — запрос #jquery
Вопрос:
Я пытаюсь использовать .следите за тем, чтобы мои элементы реагировали на события нажатия даже после вызова ajax (в моем случае я использую $.post), так что, например, после моего вызова ajax я делаю это:
$('.link').live({
click: function() {
alert('testing');
}
});
это не работает. Только если я переключу его на использование обычного события щелчка, подобного этому:
$('.link').click(function() {
alert('testing);
}
это работает. Но дело в том, что $link отображается пользователю только после каждого вызова ajax и является тем, кто фактически выполняет вызов ajax. Таким образом, если я использую обычное событие click, оно сработает только один раз после первого вызова ajax (я привязываю событие после первого вызова ajax), которое впервые показывает ссылку $.
После того, как ссылка $ будет показана в первый раз и пользователь нажмет на нее в первый раз, внизу снова появится список элементов, включающий ссылку $. Однако на этот раз это больше не работает, потому что я все еще привязываю событие click только без использования .live.
Как мне сделать это так , чтобы .живые работы, которые позволят ссылке работать каждый раз после N-го количества переходов?
Отредактировано: Измените $list на использование селектора. Извините за предыдущую неясную информацию. На самом деле я использую селектор для использования .ЖИВЫЕ КОНЦЕРТЫ. На самом деле я пытаюсь предоставить функциональность «Просмотреть больше». Таким образом, после того, как пользователь вводит что-либо в текстовое поле, появляются результаты поиска (через ajax), а внизу появляется ссылка «Просмотреть подробнее». Когда пользователь нажмет на нее, к списку будут добавлены более релевантные результаты поиска, и еще одна ссылка «Просмотреть подробнее» снова появится в нижней части списка. Однако на этот раз это больше не работает, потому что я не могу получить .живите, чтобы работать с этим.
Комментарии:
1. Очевидный вопрос — но я полагаю, вы проверили свою версию jQuery? Эта версия .live работает только с 1.4.3 и более поздними версиями
2. Можете ли вы показать нам, как вы получаете значение для $ link?
3. @Prescott на данный момент я использую jQuery 1.6.1
Ответ №1:
Вы можете попробовать это так, как я всегда это делаю, например:
$(".class").live("click", function () {
//Do something
});
Ответ №2:
Вы используете селектор при указании live
делегата. Пример:
$('.SomeClass').live(...
Это привяжет событие к документу, где будет проверяться происхождение события. Если источник совпадает с селектором, запускается обработчик событий.
Вы должны использовать селектор при привязке live
делегата, вы не можете использовать какой-либо другой метод обхода DOM для поиска элементов, поскольку селектор вычисляется при возникновении события, а не при привязке делегата.
Комментарии:
1. Извините за мой неясный вопрос. Отредактировал мой первоначальный вопрос, чтобы сделать его более понятным
Ответ №3:
Вместо этого я решил проблему, используя пузырящееся событие. Что я сделал, так это вместо использования .live() я сделал это:
$('.linkParent').click(function(event) {
$tgt = $(event.target);
if ($tgt.attr('class')=='link') { alert('works now!'); }
});
Такой, что $ (‘.link’) всегда находится внутри $(‘.linkParent’) и вызов ajax всегда загружает данные только внутри $(‘.linkParent’).
Комментарии:
1. Это именно то, что делает
delegate
метод, который является вариантомlive
метода. Если это сработает, то также будет работатьlive
илиdelegate
.