如何更改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' ,你应该添加这个代码: 
- 
为
<select>添加新选项:var opt = "<option value='newValue' selected ='selected'>" + newLabel+ " </option>"; $(selLocationID).html(opt); - 
触发
<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 } }); });