我正在使用jquery-select2(4.0.0)。问题是,当我选择一个选项,然后选择另一个选项时, item.selected 对于两个选项仍然为true - FOREVER。是否有一些我缺少的初始配置选项或者这是一个错误?
function formatResult(item) {
console.log("item selected = ", item.selected);
return item.text;
}
$('select').select2({
templateResult: formatResult,
minimumResultsForSearch: Infinity,
placeholder: "Please choose",
multiple: false,
maximumSelectionSize: 1
});

<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.js"></script>
<select>
<option></option>
<option>conan</option>
<option>kimmel</option>
<option>stewart</option>
<option>colbert</option>
</select>
&#13;
答案 0 :(得分:0)
我应该首先说明item.selected
(数据对象的selected
属性)未记录,将以后更改。为什么我说会?因为这个错误只发生在单个选择元素上(如最后所述),但你现在可以放心地忽略它。
现在,item.selected
属性仅由<input />
元素上的Select2使用,item.element.selected
属性用于<select>
元素。使用<select>
元素时,总是是您的真相来源,因为item.element
是对您的浏览器用于确定哪些数据的<option>
元素的引用应该发送到服务器。
您可以在item.element.selected
查看选择更改后正确更新后看到。
function formatResult(item) {
console.log("item selected = ", item.selected);
console.log("item.element.selected = ", item.element && item.element.selected);
return item.text;
}
$('select').select2({
templateResult: formatResult,
minimumResultsForSearch: Infinity,
placeholder: "Please choose",
multiple: false,
maximumSelectionSize: 1
});
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.js"></script>
<select>
<option></option>
<option>conan</option>
<option>kimmel</option>
<option>stewart</option>
<option>colbert</option>
</select>
是的,item.selected
属性将来会被修复,所以它是准确的。现在它没有更新,因为在单个选择中,选择了新选项,并且隐式取消选择旧选项。这与多重选择不同,其中明确选择和取消选择选项。