2013-10-27 41 views
1

我想在多選中計數未選中。但似乎有一些問題。見搗鼓更多..jquery multiselect:計數爲非選定的選項不能正常工作

問題:

  1. 試着點擊Select allDeselect all按鈕幾次,Select all停止工作。
  2. 即使Select all在視覺上停止工作,它仍然在dom中選擇/取消選擇。您可以使用螢火蟲來檢查它。
  3. 如果是在dom中選擇/取消選擇,爲什麼它會爲取消選定的元素提供不正確的計數?

注:

請遵循以低於小提琴嚴格按照此順序,看看我的問題。 點擊Select all,然後Deselect all,然後再次點擊Select all。 此時DOM/Firebug顯示選項被選中。 但是,當我按計數我得到結果4 instaed 0

目的:我不關心,如果在視覺上或不選擇,我的主要目的是爲了獲得正確的計數未選擇的選項螢火顯示「選項「正在被選中和取消選擇。

的jsfiddle:http://jsfiddle.net/bababalcksheep/fgfdb/

HTML:

<button id="countdeselected">Count deselected</button> 
<button id="selectall">select All</button> 
<button id="deselectall">Deselect All</button> 
<select name="languages[]" multiple="multiple" class="multiselect" id="languages" style=" "> 
    <option value="ALB">Albania</option> 
    <option value="DZA">Algeria</option> 
    <option value="alfa">Custom1</option> 
    <option value="beta">Custom2</option> 
</select> 
<ul id="status"></ul> 

JS:

$("#countdeselected").click(function (event) { 
    var dd = $("#languages option:not(:selected)").length 
    $('#status').append($('<li>').text(dd)); 

}); 

$("#selectall").click(function (event) { 
    $("#languages option").attr('selected', 'selected'); 
}); 
$("#deselectall").click(function (event) { 
    $("#languages option").attr('selected', null); 
}); 
+0

在Chrome,它工作得很好。但在Firefox上,一旦按下全選然後全部取消選擇,您從現在開始無法按全選按鈕。很奇怪。 –

+0

但是,如果您按全選,然後取消選擇全部,然後手動選擇所有項目,它會起作用。 –

回答

5

有一個屬性和元素的屬性之間的差。屬性是初始狀態,屬性是當前狀態。

您正在設置選項的屬性,該選項僅在元素不具有開頭的屬性時才起作用。之後,屬性接管並且設置屬性對當前狀態不再有任何影響。

當你想改變選擇狀態,你要設置的屬性,而不是屬性:

$("#selectall").click(function (event) { 
    $("#languages option").prop('selected', true); 
}); 
$("#deselectall").click(function (event) { 
    $("#languages option").prop('selected', false); 
}); 

演示:http://jsfiddle.net/Guffa/fgfdb/3/

+1

+1用於解釋屬性和屬性之間的差異。 –