2012-05-18 158 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

它真的像一個魅力:)工作嘗試了很多解決方案,但無法找到像這樣的修復 –