select2 设置选中值新方法

Posted

技术标签:

【中文标题】select2 设置选中值新方法【英文标题】:Select2 set selected value new method 【发布时间】:2015-04-23 07:52:12 【问题描述】:

我使用这样的代码为选择(使用 Select2)设置加载时的默认值:

$('#soff_gar').select2(placeholder: "Scegli", initSelection: true ).select2("val","<?php echo $garante; ?>");

在控制台上升级到 4.0 版我读到:“Select2:select2("val") 方法已被弃用,将在以后的 Select2 版本中删除。改用 $element.val()。”所以我试图将我的代码更改为

$('#soff_gar').select2(placeholder: "Scegli", initSelection: true ).val("<?php echo $garante; ?>");

$('#soff_gar').select2(placeholder: "Scegli").val("<?php echo $garante; ?>");

但它们都不起作用。我究竟做错了什么?有什么提示吗?

【问题讨论】:

【参考方案1】:

来自the release notes:

你应该直接在底层元素上调用 .val 反而。如果你需要第二个参数(triggerChange),你 还应该在元素上调用 .trigger("change")。

$("select").val("1"); // instead of $("select").select2("val", "1");

所以,如果你有一个选择元素:

<select id="mySelect">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

过去你会这样初始化它:

$("#mySelect").select2().select2("val","audi");

这已被替换为:

$("#mySelect").select2();
$("#mySelect").val("audi").trigger("change");

对你来说,我想这会转化为:

$('#soff_gar').select2(
  placeholder: "Scegli", 
  initSelection: true 
);
$('#soff_gar').val(<?php echo $garante; ?>).trigger("change");

不过,您是否有任何理由以编程方式执行此操作?

参考我的例子,这也可以:

<option value="audi" selected>Audi</option>

HTH

【讨论】:

所以重点是触发器(“更改”)!谢谢!我阅读了您在回答中提到的注释,但没有明白这一点。我编写代码的原因在于我如何构建页面并提高代码可读性 触发选择有效,但它确实是触发更改事件,所以如果更改后有重定向,页面将立即重定向。它对我有用: $("#mySelect").val("audi").select2(); &lt;option value="audi" selected&gt;Audi&lt;/option&gt; 为我工作。

以上是关于select2 设置选中值新方法的主要内容,如果未能解决你的问题,请参考以下文章

select2插件设置选中值并显示的问题

如何利用select2下拉框插件方法限制选框项个数

如何使select2插件下拉框多选并获取选中的值

隐藏 select2 多选中的选项

select2 清除选中项解决办法

带有远程数据的 select2 多选中的默认选择选项