Chrome:未捕获的ReferenceError:$未定义

时间:2012-05-18 19:47:08

标签: jquery firefox google-chrome

我在网页中使用jQuery。在Internet Explorer中使用$时,它可以正常工作。在Chrome或Firefox中引用$时,它会失败并显示错误:

Uncaught ReferenceError: $ is not defined.

截图:

enter image description here

使用我的源代码:

<!DOCTYPE html>
<html>
<head>
   <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
   <script type="text/javascript">
      function divClick(sender, event)
      {
//       var chk = $(sender).find("input").first()[0];
         var chk = jQuery(sender).find("input").first()[0];
         alert("Works in ie");
      }
   </script>
</head>
<body>

<div onclick="divClick(this, event)">
    <input type="checkbox">
</div>

</body>
</html>

注意:浏览器被定向到本地文件系统上的文件:

enter image description here

更新:尝试将其更改为jQuery

更新:Chrome找到jquery文件(即没有404):

enter image description here

7 个答案:

答案 0 :(得分:7)

这个问题只是为了记录Chrome和Firefox中的错误:

Html File encoding           IE9      Chrome
=========================    =======  ======
Windows-1252                 Works    Works
UTF-8 (without BOM)          Works    Works 
UTF-8 (with BOM EFBB)        Works    Works 
UTF-16 (with LE BOM FFFE)    Works    Fails
UTF-16 (with BE BOM FEFF)    Works    Fails

据推测,Chrome(和Firefox)假设单独的script文件与html文件具有相同的编码。

然后Chrome会尝试将jquery-1.7.2.js读为UTF-16,并且发现该文件是纯粹的(Windows-1252)垃圾而感到震惊。

答案 1 :(得分:5)

检查jquery-1.7.2.min.js的路径是否正确。如果使用firefox或chrome开发人员工具查看文件是否下载,您可以签入firebug。您很可能获得了jQuery文件的404,因为在页面上未定义$,这是jQuery对象的别名。

答案 2 :(得分:3)

您可以在Firefox和Chrome中使用Javascript获取此错误:

Uncaught ReferenceError: $ is not defined.

如果你包括这样的jquery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">
</script>

并且您的服务器配置为不允许下载javascript内容并在运行时运行,然后您收到上述错误。看看整个错误:

[blocked] The page at https://yoursite.com/blah# ran insecure content 
from http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js.
/blah#:1
Uncaught ReferenceError: $ is not defined 

这意味着您的网络服务器不允许即时加载javascript内容。这是一种安全风险,因为有人可能会在那里注入恶意内容供您下载并拥有您的服务器。

答案 3 :(得分:1)

上述所有内容均不适用于Chrome 49。 我不得不将类型指定为“application / javascript”,如下所示:

<script src="lib/jquery-1.11.3.min.js" type="application/javascript"></script>

使用“text / javascript”无效。

答案 4 :(得分:0)

尝试:

var chk = jQuery(sender).find("input").first()[0];

答案 5 :(得分:0)

你的功能需要在dom准备就绪:

$(function(){

  function divClick(sender, event)
  {
     var chk = $(sender).find("input").first()[0];
     alert("Works in ie");
  }

});

这将允许函数仅在页面加载后触发。 您的脚本也应该在结束HTML标记之前加载。不是所有的顶部。这将允许页面加载HTML和CSS更快,因为它不必等待JS加载。

还要确保从HTML中获得正确的jQuery路径。

最后一件事,

相反,如果在内联HTML中使用您的点击侦听器,请尝试将其移至JS。它只是一种更清洁,更有条理的方式来处理它。

$('.clickMe').click(function(){
    //do stuff here
}) 

答案 6 :(得分:0)

而不是html中的onclick,我在Jquery代码中通过id分配了所有内容。

我不确定您是否想知道是否选中了div或是否选中了复选框。我将输入检查放入代码中,并在单击div时注释掉代码。

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

<script type="text/javascript">
$(function(){
// $('#divid').unbind("click").click(function(){
$('#someid').unbind("click").click(function(){
if($(this).is(':checked')){
alert("checked");
}else{
alert("not checked");
}
});
});
</script>

</head>
<body>

<div id="divid"><input type="checkbox" id="someid"></div>

</body>
</html>