2013-01-25 90 views
0

我寫了一個函數,它工作正常,但是當我嘗試在多個具有相同類的html塊上重複使用它時,它會中斷。我試圖使用.next().closest()方法,但沒有結果。我在哪裏應用這些?該功能是重新創建一個<select>下拉列表,但通過使用無序列表。如何重用此功能?

重要的是,類和功能保持不變,因爲該列表由CMS生成,並且可以多次處理一個頁面,所以有一個解決方案,我更改代碼並分別調用每個函數並不好。

演示

Dropdown works fine(功能工作正常,一個無序列表)

Dropdown breaks(複用功能和HTML代碼時)

+0

我猜你需要改變'$(「。options」)。toggle();'到'$(this).next(「。options」)。toggle();' –

回答

1

這可能是更好的..看看這個小提琴

使用toggleClass()

Fiddle

+0

哦,太棒了,這節省了大量的代碼,甚至沒有開始比較我寫的邏輯。謝謝! – user1901096

+0

使用此錯誤時遇到了一個錯誤。當我選擇一個列表項並再次單擊'下拉列表'時,列表順序再次默認,並顯示第一個項目。是否有任何方法來防止這種情況? – user1901096

+0

所以當用戶點擊它時,你希望再次在列表中選擇最後一個項目? –

3

你的腳本有許多事情需要改變。盡我所能瞭解你想要做的事情。

主要點是這樣的:

$(".cloned").click(function(){ 
    $('.options').toggle(); 
    e.preventDefault();     
}); 

$('.options')選擇的處理器中選擇所有options類的元素,無論在哪裏,你的文檔中點擊的。這就是爲什麼每個下拉菜單都是點擊激活的原因。

您應該只選擇點擊的具體.options元素。有很多方法可以做到這一點,但是這是我做過什麼:

$(this).next('.options').toggle(); 
+0

嗨,理查德,感謝您的明確回答和解決方案。我試着用這個做一個無序列表,其行爲如同