2010-07-16 63 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', {});