不能使用Select2以编程方式选择选项

Can't programmatically select option using Select2

本文关键字:方式 选择 选项 编程 Select2 不能      更新时间:2023-09-26

我有一个Select2工作良好附加到一个选择列表,但当有人进入一个新的项目,我重新绑定选择列表,并尝试以编程方式选择新项目,它拒绝显示。
还有一些其他的帖子是这样的,但他们的解决方案不适合我。

  1. 使用.select2("val", value)。什么也不做。
  2. 使用.select2("data", value)。什么也不做。不知道这有什么不同。
  3. 使用InitSelection选项设置。这会导致以下错误消息:Uncaught Error: Option 'initSelection' is not allowed for Select2 when attached to a select element .
在向数据库添加新选项后的Ajax成功函数中,我有以下Javascript:
BindDishes(RestaurantID); //rebinds the select list successfully
$('#hidDishID').val = data.DishID; //populates a hidden field
var arr = '[{id: "' + data.DishID + '", text: "' + data.DishName + '"}]'; 
$("#dd").select2("data", arr);

所以在这个最新的迭代中,我试图提供一个数组的id和文本从选择列表项作为另一个建议的解决方案,但仍然没有发生。我做错了什么?当使用Select2与选择列表时,这是不可能的吗?

编辑:我在MVC中有以下行,创建选择列表:

@Html.DropDownGroupListFor(m => m.DishID, Model.GroupedSelectList, "Select a dish", new { id="dd",style="width:470px;" })

,它必须通过从模型绑定到DishID而导致问题,该模型在来自服务器时最初是空白的。DropDownGroupListFor只是一个HTML助手,允许在选择中使用OptionGroups,但它必须是绑定的问题。这里最好的方法是什么,以不同的方式绑定或以某种方式更新模型的DishID,不确定最佳实践?

var $example = $(".js-example-programmatic").select2();
$example.val("CA").trigger("change"); 

您需要在添加/修改项之前销毁select2。如果你这样做了,那么你的select2就会像它的第一次绑定一样响应

动态添加、删除和刷新项目