1

我正在使用 jquery-select2 (4.0.0)。问题是当我选择一个选项,然后选择另一个选项时,item.selected对于两个选项都保持正确 - 永远。是否有一些我缺少的初始配置选项或者这是一个错误?

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>

4

1 回答 1

0

我应该首先说item.selectedselected数据对象的属性)没有记录,并且将来会改变。为什么我说?因为这个错误只发生在单个选择元素上(正如最后解释的那样),但你现在可以放心地忽略它。

目前该item.selected属性仅由 Select2 用于<input />元素,并且该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属性将在未来修复,因此它是准确的。现在它没有更新,因为在一次选择中,新选项被选中,而那些隐式取消选择旧选项。这与多重选择不同,其中选项被明确选择和取消选择。

于 2015-07-12T22:10:37.690 回答