如何更改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 } }); });