如何更改select2下拉select的值与JqGrid?

我正在使用Oleg的select2演示 ,但是我想知道是否可以在下拉菜单中更改当前选定的值。

例如,如果加载的四个值是: "Any", "Fruit", "Vegetable", "Meat" ,下拉列表默认为"Any" ,我将如何能够在JqGrid中将其更改为"Fruit"事件loadComplete

这可能吗?

对于select2版本> = 4.0.0

其他的解决scheme可能无法正常工作,但下面的例子应该可以工作

解决scheme1:导致所有附加的更改事件触发,包括select2

 $('select').val('1').trigger('change'); 

解决scheme2:导致JUST select2更改事件触发

 $('select').val('1').trigger('change.select2'); 

看到这个jsfiddle的例子。 感谢解决scheme2的@minlare。

说明:

说我有一个最好的朋友select与人的名字。 所以鲍勃,比尔和约翰(在这个例子中我假设价值是一样的名字)。 首先,我在select中初始化select2:

 $('#my-best-friend').select2(); 

现在我在浏览器中手动selectBob。 接下来鲍勃做了一些调皮,我不再喜欢他了。 所以系统为我selectBob:

 $('#my-select').val('').trigger('change'); 

或者说我让系统select列表中的下一个而不是Bob:

 // I have assume you can write code to select the next guy in the list $('#my-best-friend').val('Bill').trigger('change'); 

select2网站上的注意事项(请参阅弃用和删除的方法 )可能对其他人有用:

.select2('val') “val”方法已被弃用,并将在Select2 4.1中被删除。 不build议使用的方法不再包含triggerChange参数。

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

 $('select').val('1').trigger('change'); // instead of $('select').select2('val', '1'); 

看看你使用下面的select2文件来获取/设置值。

 $("#select").select2("val"); //get the value $("#select").select2("val", "CA"); //set the value 

@PanPipes已经指出,这已经改变了4.x(去折腾他下面)。 val现在直接调用

$("#select").val("CA");

所以在jqGrid的loadComplete中,你可以得到你正在寻找的任何值,然后设置select框的值。

来自文档的通知

请注意,为了使用此方法,您必须在选项中定义initSelection函数,以便Select2知道如何将您在val()中传递的对象的id转换为需要渲染select的完整对象。 如果您连接到select元素,则已经为您提供了此function。

 this.$("#yourSelector").select2("data", { id: 1, text: "Some Text" }); 

这应该是有帮助的。

只是想添加第二个答案。 如果您已经将select作为select2提交 ,则需要在select器中反映如下:

 $("#s2id_originalSelectId").select2("val", "value to select"); 

这应该更容易。

 $("#e1").select2("val", ["View" ,"Modify"]); 

但要确保你传递的值已经存在于HTMl中

如果你想添加新的value='newValue'text='newLabel' ,你应该添加这个代码:

  1. <select>添加新选项:

     var opt = "<option value='newValue' selected ='selected'>" + newLabel+ " </option>"; $(selLocationID).html(opt); 
  2. 触发<select>更改为选定的值:

     $(selLocationID).val('newValue').trigger("change"); 

在select2中select一个String选项有一些麻烦:

使用选项:“option string1 / option”used:

 $('#select').val("string1").change(); 

但有一个选项的值:选项值“E”string1 /选项:

 $('#select').val("E").change(); // you must enter the Value instead of the string 

希望这可以帮助有人在同一个问题上挣扎。

你有两个select – 作为@PanPipes回答状态,你可以做到以下几点。

 $(element).val(val).trigger('change'); 

只有在没有绑定到更改事件的自定义操作时,这才是可接受的解决scheme。 我在这种情况下使用的解决scheme是触发select2特定的事件,更新select2显示的select。

 $(element).val(val).trigger('change.select2'); 

我的预期代码:

 $('#my-select').val('').change(); 

非常感谢@PanPipes的有用之一。

如果你想select一个值然后使用$('#select').val(1).change()

如果你想select多个值然后设置数组中的值,所以你可以使用这个代码$('#select').val([1,2,3]).change()

对于V4 Select2,如果要更改select2的值和下拉的文本表示forms。

 var intValueOfFruit = 1; var selectOption = new Option("Fruit", intValueOfFruit, true, true); $('#select').append(selectOption).trigger('change'); 

这将不仅设置幕后的值,而且还设置select2的文本显示。

https://select2.github.io/announcements-4.0.html#removed-methods中拉出;

如果你有一个Ajax数据源,请参考这个免费的错误

https://select2.org/programmatic-control/add-select-clear-items

//设置Select2控件

 $('#mySelect2').select2({ ajax: { url: '/api/students' } }); 

/ /获取预选的项目,并添加到控件

 var studentSelect = $('#mySelect2'); $.ajax({ type: 'GET', url: '/api/students/s/' + studentId }).then(function (data) { // create the option and append to Select2 var option = new Option(data.full_name, data.id, true, true); studentSelect.append(option).trigger('change'); // manually trigger the `select2:select` event studentSelect.trigger({ type: 'select2:select', params: { data: data } }); });