2017-04-16 58 views
0

我已經查看了周圍的堆棧溢出以查找相同問題的答案。通常這是簡單的語法錯誤,如省略結束標記或不正確地寫入src屬性。 雖然我可以發誓,我的html和js是正確的,但我仍然無法讓jQuery工作。我無法連接我的jQuery

正常的javascript(函數測試())完美地工作,因爲它與使用onclick的html按鈕鏈接。不過,$('#click')jQuery根本無法工作。

<head> 
    <script type='text/javascript' src='jquery-3.2.1.min.js'></script> 
    <script type='text/javascript' src='test.js'></script> 
</head> 
<body> 
    <button type='button' style='margin: 1em;' id='click'>CLICK</button> 
    <button type='button' style='margin: 1em;' id='testButton' onclick='test()'>TEST LINKING</button> 
</body> 

js文件和html都在同一個文件夾中。 而這裏的js.test:

$('#click').click(function() { 
alert('jQuery Works!'); 
}); //NOT WORKING! 

function test() { 
alert('Okay!'); 
} //WORKING! 
+1

天哪...'$(函數(){...});'或'$(文件).ready(function(){....});' –

+0

很棒!該文件已經完美運作。非常感謝。 那麼,我做了什麼,使它工作? – Noah

+0

因爲jQuery嘗試爲不存在的元素綁定事件偵聽器,所以您必須包裝所有放置在** BEFORE **之前的jQuery代碼。您的當前代碼**只會在**元素之後加載'test.js' **(即,將其放在底部,在關閉之前加上'test.js' ** –

回答

0

問題不鏈接jQuery的,它是關於範圍和DOM加載。

當您全局創建一個函數時,它將成爲您隨時可以訪問的全局引用。

當您調用函數或更改變量的值時,它需要一個範圍來知道何時被調用。它通常是全局範圍,但是當你使用jQuery函數時,你不知道你的庫是否已經加載,因此如果你能夠訪問它們提供的功能。

因此,在完全加載DOM時,將自己的EH包裝在由jQuery執行的document.ready函數中。你可以這樣來做:

$(document).ready(function(){ 
    $('#click').click(function() { 
    alert('jQuery Works!'); 
    }); 
}); 

或者在更短的方式:

$(function(){ 
    $('#click').click(function() { 
    alert('jQuery Works!'); 
    }); 
}); 
0

啊,這裏的問題是,當你加載JS和jQuery文件,瀏覽器開始通過你的代碼去,發現它現在應該綁定一個點擊處理程序#click,但是當它實際上在頁面上找到#click時,它不會得到它。因爲它尚未添加到dom中!

你有三種方式來解決這個問題:

  1. 使用腳本標籤的defer屬性。它被用來定義將不會運行,直到頁面加載

    <script type='text/javascript' src='test.js' defer></script> 
    
  2. 後腳本只是加載JS事件處理程序一樣的div後:

    <head> <script type='text/javascript' src='jquery-3.2.1.min.js'></script> </head> <body> <button type='button' style='margin: 1em;' id='click'>CLICK</button> <button type='button' style='margin: 1em;' id='testButton' onclick='test()'>TEST LINKING</button> <script type='text/javascript' src='test.js'></script> </body>

這就是爲什麼你平常看到這行

把CSS包含在head和JS中只包括befor E中的body關閉標記

這是因爲沒有CSS的網頁看起來難看,直到它已被加載,並把JS最終將確保該DOM是地方要執行任何操作它

  1. 您可以使用$(document).ready(function(){ ... })事件處理程序。這個事件在文檔準備就緒或基本上在創建dom時觸發。綁定你點擊處理程序在這裏確保elem實際上可供你的JS綁定到
0

你不能定義一個函數,像這樣。你需要這樣做

$(document).ready(function() { 
    $('#click').click(function() { 
    alert('jQuery Works!'); 
    //declare other function 
    }); 
}); 

`