2014-03-31 37 views
0

我有一個元素,作爲.collapsed類,點擊此後,jQuery函數刪除此類並添加.expandedJS仍然指的是已被刪除的類

一旦.collapsed已被刪除,點擊元素時,它仍會運行我創建的函數。

HTML

<div class="collapsed"> 
Some content that will be changed 
</div> 

JS

$(document).ready(function() { 

    function expandItem() { 
      $(this).addClass("expanded"); 
      $(this).removeClass("collapsed"); 
     return false; 
    } 

    $('.collapsed').click(expandItem); 

}); 
+0

使用'$(文件)。就緒(函數(){$()點擊(expandItem) '崩潰';});' –

+0

爲什麼代碼不能運行? '$('。collapsed')。click(expandItem);'line意思是「找到所有有'摺疊'類的項目,並給它們這個點擊處理程序:...」。不管您是否稍後再刪除該類,都不會影響您之前綁定該點擊處理程序的事實。 –

+0

@TamilSelvan我確實有文檔準備就緒,我只是沒有將它添加到上面的代碼。請原諒我的簡潔,我會更新這篇文章。 – Imran

回答

1

您需要使用event delegation,否則選擇進行評估,只有當代碼$('.collapsed').click(expandItem);執行後對所做的更改一次dom結構不會影響已經添加的處理程序。

當您使用事件委託時,事件發生時傳遞的選擇器會被延遲評估,因此會對註冊後所做的更改做出反應。

function expandItem() { 
    $(this).addClass("expanded"); 
    $(this).removeClass("collapsed"); 
    return false; 
} 

$(document).on('click', '.collapsed', expandItem); 
相關問題