2012-07-18 81 views
1

有一些問題讓我的.on()工作。我的網站是here.on()沒有檢測到dom變化

如果你看一看www.eliteweb-creation.co.uk/dev/js/nav.js,我就$('a.left.active')

設置了一些關於mouseenter & mouseleave事件處理程序對於任何人的緣故在未來的瀏覽這個帖子,我已經添加了代碼的jsfiddle:

http://jsfiddle.net/TcbAP/

錨有.active加入到他們動態點擊時,因此使用的.on()代替.click()所以jQuery檢測到dom更改並添加事件處理程序。

我的.on("click")對於主播在添加.active類之前工作正常,問題似乎是.on()未檢測到類更改。

任何和所有的幫助表示讚賞。

+2

你應該張貼在這裏你的代碼。 StackOverflow不是一個調試服務。我們在這裏幫助您解決*特定的問題,並讓這些問答有助於他人的未來。你能否提供[SSCCE](http://sscce.org/)? – 2012-07-18 23:12:33

回答

4

使用.on()不會奇蹟般地讓您的代碼檢測到更改。

你必須委派從祖先元素的單擊事件處理程序,不會改變:

$('.nav').on('click', 'a.active', function(e) { 
    // Put your code here...   
}); 

您可以在jQuery docs: Direct and delegated events

+0

太棒了,這個作品完美!請參閱此處更新的示例: http://jsfiddle.net/TcbAP/1/ – user1536305 2012-07-19 08:43:59

0

.on將只重視要素閱讀更多關於它是在運行時符合標準,這就是爲什麼他們建議將這樣的定義放入document.ready

從jQuery的API:

的事件處理程序僅結合到當前選擇的元素;它們必須在您的代碼調用時存在於頁面上.on()

除非再次運行.on定義,否則它不會重新評估新修改的元素。你可以在你的定義更寬泛,檢查其他類,如果你想:

$('a.left').on("click", function(event){ 
    if($(this).hasClass('active')) { 
    // Do fancy stuff here 
    } 
}); 

編輯:代碼清理