templateResult显示多个项目的选择为true

时间:2015-07-10 19:31:26

标签: jquery-select2 jquery-select2-4

我正在使用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;
&#13;
&#13;

1 个答案:

答案 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属性将来会被修复,所以它是准确的。现在它没有更新,因为在单个选择中,选择了新选项,并且隐式取消选择旧选项。这与多重选择不同,其中明确选择和取消选择选项。