2012-05-18 83 views
6

我在网页中使用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

更新:铬发现jQuery的文件(即没有404):

enter image description here

+0

检查'jquery-1.7.2.min.js'与html是否在同一个文件夹中。没有定义'$是你在没有包含jQuery库时得到的错误。 –

+0

你可以举一个例子来说明如何在dom中包装我的功能吗?还有如何将点击监听器移动到js?看看我的例子。 – Patriotec

回答

7

而这个问题这里只是记录在Chrome和Firefox的bug:

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 

大概浏览器(和Firefox)假设一个单独的script文件具有相同的编码为html文件。

然后Chrome尝试将jquery-1.7.2.js读为UTF-16,并且很震惊地发现该文件是纯文本(Windows-1252)垃圾。

5

检查的jquery-1.7.2.min.js路径是否正确。如果使用firefox或chrome开发者工具来查看文件是否被下载,你可以检查firebug。你最可能得到404的jQuery文件,因为$是未定义的页面,这是jQuery对象的别名。

0

尝试:

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

更新了包含该问题的问题。 –

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 
}) 
+0

你可以举一个例子来说明如何*将我的函数包装在一个dom ready *中?还有如何将点击监听器移动到'js'? –

+0

他们在那里准备好的是$(function(){})它是jQuery的短手版本。 为点击事件引用此jsfiddle。 http://jsfiddle.net/QgeD9/ – laymanje

0

而是在HTML的onclick的,我分配到jQuery代码通过ID一切。

我不确定你是否想知道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> 
2

您可以在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 

这是什么意思是你的web服务器不允许JavaScript的内容在飞行中加载。这是一个安全风险,因为有人可以在那里注入邪恶的东西供你下载,并拥有你的服务器。

1

以上都不是适用于我在Chrome 49 我必须指定类型为“应用程序/ JavaScript的”,例如:

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

使用“文/ JavaScript的”是行不通的。

+0

它真的像一个魅力:)工作尝试了很多解决方案,但无法找到像这样的修复 –