2010-07-16 44 views
1

我無法得到以下代碼在IE8中工作,它在Firefox中正常工作。jQuery模態不會在IE中更新

用戶單擊鏈接將屬性添加到他們的收藏夾列表。點擊時,我使用jQuery將頁面加載到模式中。如果他們再次點擊相同的鏈接,代碼需要重新運行,所以它會顯示「已添加」。在IE中它只顯示原始的模式窗口,不更新。

這是非常令人沮喪的......任何人都可以幫我解決它嗎?從http://blog.nemikor.com/2009/08/07/creating-dialogs-on-demand/

謝謝, 克里斯

$(document).ready(function() { 
    var $loading = $('loading image goes here'); 

    $('.add_fav_property').each(function() { 
     var $dialog = $('<div></div>') 
      .append($loading.clone()); 
     var $link = $(this).bind('click', function() { 

      $dialog 
       .load($link.attr('href')) 
       .dialog({ 
        title: $link.attr('title'), 
        width: 400, 
        height: 150 
       }); 

      $link.click(function() { 
       $dialog.dialog('open'); 
       return false; 
      });    
      return false; 
     }); 
    }); 
}); 

jQuery代碼。

回答

0

我遇到了與IE和ajax加載類似的問題。基本上,它歸結爲IE8喜歡緩存的東西,並拒絕顯示更新的數據。將.load函數更改爲.ajax並指定「cache:false」。

http://api.jquery.com/jQuery.ajax/

6

您有幾種選擇,這是所有關於IE緩存這裏的結果。您可以使用$.ajaxSetup()不緩存任何 jQuery的AJAX請求,就像這樣:

$.ajaxSetup({ cache: false }); 

或者切換到全$.ajax()版本的.load(),像這樣:

$.ajax({ 
    cache: false, 
    url: $link.attr('href'), 
    dataType: 'html', 
    success: function(data) { 
    $dialog.html(data); 
    } 
}); 

這些要麼添加到您的查詢字符串_=XXXXX其中XXXXX部分是Date().getTime();。這可以防止瀏覽器使用緩存的結果,因爲它認爲您要求新的頁面。

第三種選擇是自己做,雖然它看起來像一個複製或工作,像這樣:

var href = $link.attr('href'); 
$dialog 
    .load(href + (/\?/.test(href) ? "&" : "?") + "_=" + (new Date()).getTime()) 
    .dialog({ 
    title: $link.attr('title'), 
    width: 400, 
    height: 150 
    }); 
1

傳遞一個空白數據對象(PO​​ST)負載函數強制IE加載內容每次。

$('#div').load('http://url/whatever', {});