【问题标题】:jQuery isn't loading and '$' is undefined in IE8jQuery 未加载且 '$' 在 IE8 中未定义
【发布时间】:2011-04-05 23:59:20
【问题描述】:

我正在尝试用 jQuery 做一个非常基本的事情,它在 IE8 中根本不起作用,但在 Firefox、Safari 和 Chrome 中运行良好; IE 总是给我一个“预期的对象”。

有人可以帮忙吗?由于页面非常基本,我不确定出了什么问题:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.2.min.js"></script>
    <script type="text/javascript">
        $(function() { 
            alert("It works!");
        });
    </script>
</head>
<body>
</body>
</html>

IE(并且只有 IE)在加载代码上给我一个错误,说“需要对象”。我有 IE 开发工具栏,$ 未定义,但在 Firebug 中它显示为“函数”。真的不知道是什么原因造成的。

【问题讨论】:

  • jquery-1.5.2.min.js 上是否出现 IE 404?
  • 为我工作。我从本地文件系统(而不是通过网络服务器)对其进行了测试,并且必须授予 IE 权限以在本地页面上运行脚本。信息栏提示我这样做。也许这让你绊倒了?
  • @MattBall:浏览器没有 404。
  • 我有信息栏并同意允许脚本。还转到 URL 本身 IE 会提示我打开/保存它。
  • @MattBall:如果 IE8 可以,Firefox 也可以。

标签: jquery internet-explorer-8


【解决方案1】:

我使用HTML5Boilerplate方法:

<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if necessary -->
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
  <script>window.jQuery || document.write("<script src='js/libs/jquery-1.5.1.min.js'>\x3C/script>")</script>

编辑

顺便说一句...我在 IE6-IE9、Firefox、Chrome、Safari 和 Opera 中使用它,我从来没有遇到过 $ 未定义的问题。如果你有插件,我会使用这种模式来确保变量是它们应该是的:

(function($, window, document, undefined) {

    // code here

})(jQuery, this, document);

【讨论】:

  • 我也尝试在本地下载它,以防它与 CDN 相关;同样的事情发生。 Firefox 可以正常使用,而 IE 不行。
  • 问题必须在您的浏览器设置中的某个地方。我刚刚做了这个jsFiddle 并测试了你的复制/粘贴代码。我在 IE8 中打开它并收到警报。
  • 事实上,为了确保,我将您的代码复制/粘贴到记事本中,保存为 test.html 并在 IE8 中打开。我收到一条关于运行脚本或 ActiveX 控件的消息。我单击以允许阻止的内容并运行。
  • @JackNicholson - 没问题。很高兴它做到了!
【解决方案2】:

好吧,我觉得自己像个白痴。我不知道怎么做(我当然没有改变它!)但不知何故我的 IE 禁用了 JavaScript,所以难怪它不起作用!我只在可以提供帮助的情况下使用 FireFox。

【讨论】:

    【解决方案3】:

    我以前遇到过这个问题。这可能是由多种原因引起的,但我发现的最简单的解决方案是使用“jQuery”代替美元符号。

    jQuery(function() { 
                alert("It works!");
    });
    

    【讨论】:

    【解决方案4】:

    您可以尝试这样的替代语法:

    (function($){
        $(function(){
    
        })
    })(jQuery)
    

    【讨论】:

    • 替代语法不会改变 $jQuery 未定义。
    • @Tomalak 没有反对意见?并不是我想用你的 226 票来鼓励你
    • @mcgrailm: 是不是很短?
    【解决方案5】:

    这个 works 在我的 Windows 7 上的 Internet Explorer 8.0.7600.16385 副本中非常好。

    您的浏览器配置一定有问题。

    【讨论】:

    • @Allan:很遗憾您在问题中没有提及这一点;它甚至更多地指向了一些缓解情况。
    【解决方案6】:

    您可能需要像这样将您的函数放入准备好的事件处理程序中:

    $(document).ready(function () {
       $(function() {
         alert("It works!");
       }):
    });
    

    这样,在你的函数运行之前,整个 dom 就已经被处理了。

    【讨论】:

    • $() 只是 jQuery 中 $(document).ready() 的简写。
    • (a) 不,他没有,因为他没有使用 DOM。 (b) 他已经这样做了。 (c) 你还在尝试使用$,问题是他的$没有正确定义。
    • 你对,我的错。我没有意识到这是 $document.ready() 的简写。我假设在函数定义之前没有加载 jquery。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多