Манипулирующие элементы после AJAX load () - PullRequest
2 голосов
/ 29 сентября 2010

Я пытаюсь манипулировать некоторыми элементами после их загрузки с помощью .load ().У меня все загружается правильно, но я не могу ориентироваться на какие-либо элементы в любом из загруженных элементов.Это кажется чем-то легким, но я просто могу указать на это.

Я использую обратный вызов после загрузки элементов, но DOM, кажется, не знает об их существовании?

function load_page(){
    $('#page_name').load("/page-name/ .page", null, load_complete());
}

function load_complete() {
    $('#page_name .book_img').addClass('hello');
}

Хорошо, это то, где я сейчас нахожусь.Я добавил ...

$('#wrapper').ajaxComplete(function() {
    $('#page_name .book_img').addClass('hello');
}

, который работает.Должно быть различие между .autoComplete и обратным вызовом, который упакован с функцией .load ().Мне это не очень нравится, потому что оно вызывается каждый раз, когда завершается загрузка события AJAX, но оно продвигает меня немного дальше.

У кого-нибудь есть что-нибудь лучше?

[РЕДАКТИРОВАТЬ]

Я также пытался ...

$('#wrapper').ajaxComplete(function() {
    $('#page_name .book_img').addClass('hello');
}

Что приятно, поскольку он ожидает, пока все вызовы AJAX не будут выполнены, прежде чем вызывать функцию.Может быть, это способ сделать это, но кажется, что функция .load () позаботится об этом?

Ответы [ 3 ]

2 голосов
/ 30 сентября 2010

Похоже, что вы выполняете функцию обратного вызова вместо передачи ее в метод загрузки:

function load_page(){
    // $('#page_name').load("/page-name/ .page", null, load_complete());
    $('#page_name').load("/page-name/ .page", null, load_complete);
}

function load_complete() {
    $('#page_name .book_img').addClass('hello');
}

То, что было передано в метод загрузки, является нулевым, потому что в load_complete нет возвращаемого значения

0 голосов
/ 29 сентября 2010

Иногда рендеринг HTML занимает немного времени.Попробуйте добавить задержку перед доступом к новому контенту:

$('#page_name').load("/page-name/ .page", null, window.setTimeout(function(){load_complete()},50);
0 голосов
/ 29 сентября 2010

Вы должны включить JavaScript, который должен управлять вашими загруженными объектами, в элемент, который загружается.Это потому, что он уже прошел через весь ваш javascript.

edit

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

$.ajax ({
  async: false,
  type: "GET",
  dataType: "html",
  url: "/page-name/ .page",
  complete: function(){load_complete()};
});

update

Привет, есть и такое сокращение, которое я иногда использую.Меня удивляет, что они не работают в вашем сценарии ..

$.get($(this).attr('href'), function(response) { $('#content').html(response); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...