1

我正在尝试计算未在多选中选择的数量。但似乎有些问题。有关更多信息,请参见小提琴 ..

问题:

  1. 尝试单击Select allDeselect all按钮几次,然后Select all停止工作。
  2. 即使Select all在视觉上停止工作,它仍然在 dom 中选择/取消选择。您可以使用 firebug 来检查它。
  3. 如果它是在 dom 中选择/取消选择,为什么它会为取消选择的元素提供不正确的计数?

笔记:

请按照下面小提琴中的确切顺序查看我的问题。然后单击Select all然后Deselect all 再单击Select all。此时 DOM/Firebug 显示选项已被选中。但是当我按下计数时,我得到的结果 4 为 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);
});
4

1 回答 1

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/

于 2013-10-27T10:31:28.750 回答