我正在使用Oleg的select2演示程序,但是我想知道是否有可能在下拉菜单中更改当前选择的值。
例如,如果加载的四个值是:"Any", "Fruit", "Vegetable", "Meat"
并且下拉列表默认为"Any"
,则如何"Fruit"
在JqGrid事件中将其更改为loadComplete
?
这可能吗?
我正在使用Oleg的select2演示程序,但是我想知道是否有可能在下拉菜单中更改当前选择的值。
例如,如果加载的四个值是:"Any", "Fruit", "Vegetable", "Meat"
并且下拉列表默认为"Any"
,则如何"Fruit"
在JqGrid事件中将其更改为loadComplete
?
这可能吗?
Answers:
对于select2版本> = 4.0.0
其他解决方案可能不起作用,但是以下示例应该起作用。
$('select').val('1').trigger('change');
$('select').val('1').trigger('change.select2');
有关这些示例,请参见此jsfiddle。感谢@minlare提供解决方案2。
假设我有一个最好的朋友,请选择人名。因此,Bob,Bill和John(在此示例中,我假定Value与名称相同)。首先,我在select上初始化select2:
$('#my-best-friend').select2();
现在,我在浏览器中手动选择Bob。接下来鲍勃做了一些调皮的事,我不再喜欢他了。因此系统为我取消选择了Bob:
$('#my-best-friend').val('').trigger('change');
或者说我让系统选择列表中的下一个而不是Bob:
// I have assume you can write code to select the next guy in the list
$('#my-best-friend').val('Bill').trigger('change');
关于Select 2网站的注释(请参阅不建议使用和删除的方法),可能对其他人有用:
.select2('val') “ val”方法已被弃用,并将在Select2 4.1中删除。不建议使用的方法不再包含triggerChange参数。
您应该直接在基础元素上调用.val。如果需要第二个参数(triggerChange),则还应该在元素上调用.trigger(“ change”)。
$('select').val('1').trigger('change'); // instead of $('select').select2('val', '1');
change
事件(例如重新加载表单)时,这才是可接受的解决方案。否则,这些动作将在触发时被冗余调用change()
。
onChange
)
查看select2文档,您可以使用下面的方法获取/设置值。
$("#select").select2("val"); //get the value
$("#select").select2("val", "CA"); //set the value
@PanPipes指出,这对于4.x而言已更改(请在下面向他投赞成票)。val
现在直接称为
$("#select").val("CA");
因此loadComplete
,在jqGrid 内,您可以获取要查找的任何值,然后设置selectbox值。
来自文档的通知
注意,要使用此方法,必须在选项中定义initSelection函数,以便Select2知道如何将val()中传递的对象的id转换为需要呈现选择的完整对象。如果要附加到选择元素,则已经为您提供了此功能。
val
调用。
<select>
在那里转换成select2
由测试的类的存在性控制select2-offscreen
的<select>
。搜索工具栏的所有元素都具有以gs_
前缀开头且名称类似于in的id colModel
。您可以使用getGridParam
获取colModel
。
select2
select 重新创建过滤器栏之后,我只需要一种设置它的方法。我今天再看一下,也许我可以换个新眼睛修复它。再次感谢。更新:将代码包装在布尔检查中解决了我遇到的问题,尽管它停止刷新搜索栏,而不是再次选择上一个元素。
this.$("#yourSelector").select2("data", { id: 1, text: "Some Text" });
这应该有所帮助。
如果要添加new value='newValue'
和text='newLabel'
,则应添加以下代码:
将新选项添加到<select>
:
var opt = "<option value='newValue' selected ='selected'>" + newLabel+ " </option>";
$(selLocationID).html(opt);
触发<select>
更改为所选值:
$(selLocationID).val('newValue').trigger("change");
您有两个选择-@PanPipes回答指出您可以执行以下操作。
$(element).val(val).trigger('change');
仅当没有将任何自定义操作绑定到change事件时,这才是可接受的解决方案。在这种情况下,我使用的解决方案是触发一个select2特定事件,该事件将更新select2显示的选择。
$(element).val(val).trigger('change.select2');
如果要选择一个值,请使用
$('#select').val(1).change()
如果要选择多个值,请在数组中设置值,以便可以使用此代码
$('#select').val([1,2,3]).change()
对于V4 Select2,如果要同时更改select2的值和下拉菜单的文本表示形式。
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中提取
我的预期代码:
$('#my-select').val('').change();
完美的工作感谢@PanPipes的有用。
做这个
$('select#id').val(selectYear).select2();
如果您有ajax数据源,请参考此以获取免费的bug
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
}
});
});
如果您想在知道下拉列表中的文本但不知道其值时设置一个选定的项目,请参见以下示例:
假设您确定了一个时区并想进行设置,但其中包含值time_zone_id
。
var timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
var $select2 = $('#time-zone');
var selected = $select2.find("option:contains('"+timeZone+"')").val();
$select2.val(selected).trigger('change.select2');
// Set up the Select2 control
$('#mySelect2').select2({
ajax: {
url: '/api/students'
}
});
// Fetch the preselected item, and add to the control
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
}
});
});
字体:选择2个文档