jQuery模式不会在IE中更新

时间:2010-07-16 18:35:56

标签: jquery popup modal-dialog

我无法在IE8中使用以下代码,它在Firefox中运行良好。

用户单击链接以将属性添加到其收藏夹列表。单击时,我使用jQuery将页面加载到模式中。如果他们再次单击相同的链接,则需要重新运行代码,以便显示“已添加”。在IE中,它只显示原始模态窗口,不会更新。

这非常令人沮丧......任何人都可以帮我解决吗?

$(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;
        });
    });
});
来自http://blog.nemikor.com/2009/08/07/creating-dialogs-on-demand/

的jQuery代码

谢谢, 克里斯。

3 个答案:

答案 0 :(得分:7)

您有几个选项,这是关于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 :(得分:2)

将空白数据对象(PO​​ST)传递给加载函数会强制IE每次都加载内容。

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

答案 2 :(得分:0)

我遇到了与IE和ajax加载类似的问题。基本上它归结为IE8喜欢缓存内容并拒绝显示更新的数据。将.load函数更改为.ajax并指定“cache:false”。

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