2010-03-31 4 views
1
//deep linking 

$("document").ready(function(){ 
    contM = $('#main-content'); 
    contS = $('#second-content'); 
    $(contM).hide(); 
    $(contM).addClass('hidden'); 
    $(contS).hide(); 
    $(contS).addClass('hidden'); 
    function loadURL(URL) { 
     //console.log("loadURL: " + URL); 
     $.ajax({ url: URL, 
       type: "POST", 
       dataType: 'html', 
       data: {post_loader: 1}, 
       success: function(data){ 
        $(contM).html(data); 
        $(contM).animW(); 
        } 
     }); 
    } 

    // Event handlers 
    $.address.init(function(event) { 
     //console.log("init: " + $('[rel=address:' + event.value + ']').attr('href')); 
    }).change(function(event) { 
     $.ajax({ url: $('[rel=address:' + event.value + ']').attr('href'), 
       type: "POST", 
       dataType: 'html', 
       data: {post_loader: 1}, 
       success: function(data){ 
        $(contM).html(data); 
        $(contM).animW(); 
     }}); 
     //console.log("change"); 
    }) 

    $('.update-main a').live('click', function(){ 
     loadURL($(this).attr('href')); 
    }); 

    $(".update-second a").live('click', function() { 
    var link = $(this); 
     $.ajax({ url: link.attr("href"), 
       dataType: 'html', 
       data: {post_loader: 1}, 
       success: function(data){ 
        $(contS).html(data); 
        $(contS).animW(); 
     }}); 
    }); 

}); 

Я использую jquery и плагин 'addresses' для загрузки контента с помощью ajax и поддержания разбивки на страницы. Проблема, с которой я сталкиваюсь, - это загрузка контента со ссылками, которые предназначены для загрузки содержимого во вторичное окно.jquery ajax звонок из ссылки, загруженной с помощью ajax

Я использую метод .live(), чтобы позволить jquery прослушивать новые ссылки, загруженные в основной контент div.

Это работает до тех пор, пока не будет вызван метод .ajax() для этих свежих ссылок, загруженных с помощью ajax, где начинается метод, но следует исходной ссылке до получения данных. Я предполагаю, что проблема связана с сценариями на стороне клиента, но это может быть проблемой с вызовом, сделанным сервером. Я использую цикл wordpress для анализа URL-адреса и создания html, загружаемого через jquery.

Спасибо за любые советы!

ответ

4

Проблема заключается в том, когда вы нажимаете на <a>, ваш браузер говорит: «Эй, туда» ... нужно, чтобы остановить это поведение в сценарии путем добавления return false; (или e.preventDefault();), как это:

$('.update-main a').live('click', function(){ 
    loadURL($(this).attr('href')); 
    return false; 
}); 

$(".update-second a").live('click', function() { 
    var link = $(this); 
    $.ajax({ url: link.attr("href"), 
      dataType: 'html', 
      data: {post_loader: 1}, 
      success: function(data){ 
       $(contS).html(data); 
       $(contS).animW(); 
    }}); 
    return false; 
}); 

альтернатива заключается в следующем формате:

$('.update-main a').live('click', function(e){ 
    loadURL($(this).attr('href')); 
    e.preventDefault(); 
}); 
+0

+1 - Я хотел бы также добавить, что 'click' события живут по умолчанию, так что нет никакой необходимости в' живой («клик», Fn) ', просто 'el.click (fn)' будет делать. – jps

+0

Данг, это было так очевидно. cool, thanks – Jay

+0

также, сначала я не использовал живой метод, но слушатели событий не узнавали ссылки, загруженные ajax – Jay