.live не работает после ajax $.post

#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 .