JQuery не работает после обратного вызова - PullRequest
1 голос
/ 01 марта 2010

У меня есть функция для анализа некоторых данных и получения результата, который совпадает с предыдущим, только некоторые классы были выброшены здесь и там.

$(document).ready(function() {
  $("div.rating div").click(function(){
     var str = $(this).attr('alt');
     var b = str.split("-");
     var book = b[0];

     $("div.book-" + book).load("sites/all/modules/rm_raamaturiiul_rating/rating.php", { query: str });
  });
});

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

Ответы [ 2 ]

3 голосов
/ 01 марта 2010

Вызов $(...).click(function) обработает событие click для определенных элементов, которые в настоящий момент содержит объект jQuery .
Когда вы вызываете .load, элемент заменяется новым элементом, который не имеет обработчиков событий.

Вам необходимо вызвать .live, который обработает событие для всех элементов, соответствующих селектору, независимо от того, когда они были созданы.

Например:

$("div.rating div").live("click", function() { ... });
2 голосов
/ 01 марта 2010

Это потому, что к вашему перезагруженному контенту не прикреплены обработчики событий. Присоедините их, используя метод live(), и он будет работать после перезагрузки данных, или подключите их вручную после загрузки данных (первый метод проще).

...