這裏是正在發生的事情:
$('div.select-normal div.option-'+value+'').click(function() {
option.prop("selected", "selected");
$('div.select-normal div.option').removeClass('selected');
$(this).toggleClass('selected');
});
當上面的代碼執行了您的正常選擇很多,正確地被應用的CSS類。但是,以後你有此代碼爲模式選擇很多:
$('div.option').click(function() {
var value = $(this).attr('id');
var option = $('option[value=' + value + ']');
var optiontext = $(this).text();
option.prop("selected", !option.prop("selected"));
$(this).toggleClass('selected'); // HERE IS THE ERROR
if ($(this).hasClass('selected')) {
$('ul.multiselect-dropdown-options')
.append('<li id="' + value
+ '" class="dropdown-option drop-down-option-'
+ value + '">' + optiontext
+ '<a class="remove-option">x</a></li>');
} else {
$('.drop-down-option-' + value).fadeOut().remove();
}
});
由於點擊正常選擇也有不少觸發$(「div.option」)點擊(),它正在執行toggleClass和刪除。之前添加的「已選」類。
順便說一句,如果你正在處理它,很難調試你的小提琴。在發佈小提琴時,請張貼您不會編輯的叉子網址。
更新
給一個人一條魚,他吃一天......授人以魚,他吃了一輩子。儘管您的小提琴正在改變,但我使用Google Chrome開發人員工具對此進行了調試。只需去你的小提琴,右鍵單擊,然後選擇檢查元素。點擊腳本標籤,然後從下拉菜單中選擇「顯示/」腳本。然後你可以點擊行號在javascript中設置斷點。回到Chrome,在結果窗格中執行一些操作,Chrome應該找到一個斷點。然後,您可以逐步執行操作,並逐行查看DOM如何受腳本影響。因爲Chrome沒有很好的Step Into功能(它進入了jquery源代碼),所以你需要在你的each()和click()函數中設置斷點。此外,使用雙監視器顯示器可以在這裏幫助LOT,這樣您就可以在一臺監視器上瀏覽調試器,同時在另一臺監視器中查看小提琴DOM結果。
就是這樣 - 我只是一直在看它,我無法發現它。感謝關於我的小提琴的提示 - 並不意味着對我的編輯造成任何困惑。 – Zumwalt
好。查看我的更新,瞭解更多關於使用小提琴更輕鬆地進行javascript調試的提示。 – danludwig