jQuery的.load()在IE中不起作用 - 但在Firefox,Chrome和Safari中都很好

45 jquery internet-explorer

我正撞在墙上对着这个......

我有以下代码:

$("#home").click(function(e) {
    $(".tabs").attr("src","tabs-home.gif");
    $(".islice").hide('fast');
    $(".islice").load("home.html");
    $(".islice").show('fast');  
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

它在Firefox,Safari和Chrome中运行得非常好,但IE只运行attr()并且不执行隐藏/显示或加载.我尝试删除隐藏和显示它仍然无法正常工作.

IE报告没有语法错误,即使使用DebugBar也是如此.我能做错什么?

您可以在http://www.brick-n-mortar.com上查看实际网站

S.K*_*ers 49

我有同样的问题.我发现的许多网站都建议IE可能会缓存你的代码,并建议将代码附加到

$("#home").click(function(e) {
    $(".tabs").attr("src","tabs-home.gif");
    $(".islice").hide('fast');
    $(".islice").load("home.html?" + new Date().getTime() );
    $(".islice").show('fast');
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

这应该确保IE不缓存.

有关详细信息,请参阅http://zacster.blogspot.com/2008/10/jquery-ie7-load-url-problem.html.

  • 附加一个时间戳更好,所以`$('.islice').load('home.html'+ new Date().getTime());` (13认同)
  • 应该是$(".islice").load("home.html?"+ new Date().getTime()); 代替?我的意思是,错过了'?' 关注home.html (3认同)
  • 任何机会,如果这是答案,你可以这样标记吗?我很感激...... (2认同)

Suk*_*gat 16

$ .ajaxSetup({cache:false});

这将清除IE中的缓存和.load()将起作用.我试过了.


Nen*_*eno 13

如果您正在加载的HTML被破坏,jQuery的.load()将无法在IE中运行..这对我来说是个问题.修复HTML之后,IE中的一切都很棒!


Sha*_*rad 6

我遇到了这个问题,整天都在摸不着头脑.然而,终于找到了一个解决方案,并实现了一个怪异的IE是什么.

首先,

$(".islice").load("home.html"); 
Run Code Online (Sandbox Code Playgroud)

无论我们怎么努力,都行不通.我们将不得不使用

$.get("home.html", function (data) ....... ); 
Run Code Online (Sandbox Code Playgroud)

我会解释".....",因为一般

$.get("home.html", function (data) { $(".islice").html(data); }); // doesn't work
Run Code Online (Sandbox Code Playgroud)

不行.

代替

$.get("home.html", function (data) { 
    data = '"' + data + '"';    
    $(".islice").html(data);
    var newHTML = $('.islice').html();
    $('.islice').html(newHTML.substr(1,newHTML.length-2));
}); // works
Run Code Online (Sandbox Code Playgroud)

将工作.

说明:=>数据可能有新的行号.所以设置innerHTML = data; 因为他们而休息.通过添加引号,我们将其转换为字符串,但使html添加额外的引号,以便我再次删除引号.

道德:=> IE糟透了..没有其他..


Tom*_*han 2

在 IE 中不会e.preventDefault()有任何区别 - 你必须使用它return false;来阻止事情发生:

$("#home").click(function(e) {
    $(".tabs").attr("src","tabs-home.gif");
    $(".islice").hide('fast');
    $(".islice").load("home.html");
    $(".islice").show('fast');  
    e.preventDefault();
    return false;
});
Run Code Online (Sandbox Code Playgroud)

要详细调试此问题,请查看Firebug

  • -1 jQuery 扩展事件对象使 e.preventDefault(); 是跨浏览器的。 (3认同)
  • http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29:阻止浏览器执行默认操作。使用方法 isDefaultPrevented 来了解是否曾经调用过此方法(在该事件对象上)。必要时进行修复(IE)。 (2认同)