JQuery AJAX проблема загрузки - PullRequest
0 голосов
/ 04 августа 2009

Я пытаюсь загрузить все страницы моего сайта, используя метод jQuery .load, вот так выглядит мой сайт:

<script type="text/javascript">  
  $(function() {
    $('.link').bind('click', function(e) {
            var page = $(this).attr('href');
            $('#site').addClass('loading');
            $('#content').load(page, function (){
            $('#site').removeClass('loading');
    });

    e.preventDefault();
    return false;
  });

<a href="test.php" class="link">Test</a>

С этим кодом каждая ссылка, которая получает class = "link", загрузит мою страницу в div #content. Работает отлично! Никаких проблем, но когда я загружаю test.php, если я использую class = "link" на какой-либо ссылке, кнопке или чем-то еще, это просто не работает, и новая страница загружается за пределы моего содержимого #.

Уже пытался скопировать это в новый загруженный файл, и он не работает, кто-нибудь получил подсказку?

Спасибо

1 Ответ

2 голосов
/ 04 августа 2009

Это потому, что когда вы связываете событие, оно связывает его только с теми элементами, которые находятся в DOM в это время. Поэтому, если вы добавите новые позже, они не будут привязаны к событию, которое вы ранее прикрепили. Предполагая, что у вас есть jQuery 1.3, у него есть встроенная функция, чтобы обойти это, называемая live. С его помощью вы можете привязать событие ко всем текущим и будущим элементам. Он не поддерживает все события, но click поддерживает.

Итак, помня об этом, вы просто должны заменить это:

$('.link').bind('click', function(e) {

С этим:

$('a.link').live('click', function(e) {

(я добавил а. В селектор, потому что гораздо эффективнее указать тег, если это вообще возможно)

Если у вас нет jQuery 1.3, обновите его как можно скорее. Если вы не можете, попробуйте плагин livequery , который делает то же самое, но гораздо менее элегантно. В качестве альтернативы, вы можете просто иметь функцию, которая связывает действие и вызывает его каждый раз, когда вы загружаете новые данные. Однако, учитывая все обстоятельства, jQuery live - лучший способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...