2012-07-01 52 views
0

我不明白爲什麼選項(1)不起作用。 我已閱讀liveon但錯過/無法找到答案。Jquery後期綁定使用on - 舊窗體不工作?

有人可以解釋這個或指向我關於這個文件?

1. $('#MAIN a[href="#PAGE"]').on('click',function(event){ alert("1"); }); 
2. $(document).on('click', '#MAIN a[href="#PAGE"]', function(event){ alert("2"); }); 

謝謝。

+0

請向我們顯示您的html嗎? '.on' - 將一個或多個事件的事件處理函數附加到所選元素。所以在DOM或綁定中有很多錯誤,HTML會幫助,歡呼,**和**請不要在live和.on之間混淆,live被棄用並使用.on而不是 –

回答

2

第一種形式在鏈接上掛上常規事件,而第二種形式在文檔級掛鉤委託事件。

第一個是相同的:

$('#MAIN a[href="#PAGE"]').click(function(event){ alert("1"); }); 

第一種形式需要的鏈接,當您運行的代碼存在。以後添加的鏈接不會出現在這些事件中。

第二種形式捕獲事件,當它起泡到文檔級別時,它也適用於稍後添加的鏈接。

最好你應該把委託事件掛接到儘可能接近目標元素。如果在掛鉤時存在#MAIN元素,則可以使用該元素代替文檔:

$('#MAIN').on('click', 'a[href="#PAGE"]', function(event){ alert("2"); }); 
+0

感謝您的好解釋: ) –

0

很難判斷這是否是沒有HTML &腳本執行信息的問題,但第一個搜索與選擇器匹配的元素(以及此例中的單個元素),並將事件處理程序附加到它。

第二種情況將事件處理程序附加到文檔。無論何時發生點擊事件,它都會測試以查看事件目標是否與選擇器匹配,如果是,則觸發該事件。這就是爲什麼您可以提前設置事件並動態創建元素......但是,它確實有性能問題。