2012-08-03 82 views
1

我使用jQuery的on()功能的onclick功能附加到一組錨在我的網站如下:的jQuery的功能和文件準備

<ul> 
    <li>First <a href='#' title='delete' class="itemDelete">x</a></li> 
    <li>Second <a href='http://www.repubblica.it' title='delete' class="itemDelete">x</a></li> 
    <li>Third <a href='#' title='delete' class="itemDelete">x</a></li> 
</ul>​ 

<script type="text/javascript"> 
$(document).on('click', '.itemDelete', function(e) { 
    $(this).closest('li').remove(); 
    e.preventDefault(); 
}); 
</script> 

我應該插入以下塊中的javascript代碼?

$(document).ready(function() { 
    ... 
}); 

如果是,爲什麼?

+0

因爲然後JavaScript是在庫加載時執行的,否則你會得到jquery庫不存在的錯誤.. 一個簡短的方法是:''$(function(){...} );'' – Luceos 2012-08-03 14:58:13

+0

那麼,是否最好將所有這些類型的JS代碼包含在文檔就緒塊中? – JeanValjean 2012-08-03 15:00:26

回答

3

這段代碼不需要的文件內容完全在任何情況下,因爲使用的是document它總是存在的解析。作爲第二個參數傳遞的選擇器沒有以任何方式用於檢索元素,所以dom不需要爲此做好準備。

您將無法調用$(document).ready擺在首位,如果上述情況並非如此。

明白,幕後要附加一個直接的,正常的事件偵聽器,document是很重要的。實際上,所有選擇器的作用是,如果事件傳播路徑中沒有元素與您的選擇器匹配,則不會調用您的處理函數回調函數。顯然,如果傳播被較低級別的聽衆過早停止,那麼也不會在這種情況下被解僱。

+0

你的答案似乎與Anthony Grist提供的答案不同。他肯定我不能使用'$(document).ready'塊,因爲在加載相關元素之後提供腳本。你說**更強**,因爲你聲稱,考慮到文檔內的腳本位置,因爲我在文檔上調用了'on()'函數,所以不需要使用$(document)。準備好「,因爲文檔必須準備好調用'on()'函數。我對嗎? – JeanValjean 2012-08-03 15:16:30

+0

@jonny_cage它與'on()'無關,但是你傳遞給'$'。你將'document'傳遞給總是可用的''',因此調用它的方法將起作用。如果你像'$(「div」)''那樣傳遞一個選擇器,那麼它只會在調用時發現文檔中被解析的div。對生成的jQuery對象的任何方法調用都只能在找到的div上進行操作,根據你何時調用它以及如何調用它,這些div可能不是,其中一些或全部都是。 – Esailija 2012-08-03 15:18:32

+0

@jonny_cage他的推理是混亂的,因爲你的代碼不依賴於在那裏的元素,因爲在所有你正在做'$(文件)'。如果您的代碼依賴於存在的元素,它仍然可以工作,因爲腳本元素緊隨其後。 – Esailija 2012-08-03 15:21:51

2

在這種情況下,你不需要。由於<script>標籤的HTML元素後,你的代碼會被執行後的元素已經被加載,不再需要使用DOM準備的事件處理程序,以確保它們都被載入。這就是說,我通常更喜歡包括全部我的JavaScript代碼可以在DOM準備事件處理程序的頁面上使用元素,即使它不是絕對必要的;這樣,如果我決定將它移動到其他地方 - 比如頁面頂部或外部文件 - 或者以其他方式更改它不會中斷。