例如,如果加载的四个值为:
"任何", "水果", "蔬菜", "肉类"
,并且下拉列表默认为"任何"
,如何在JqGrid事件loadComplete
中将其更改为"水果"
?这是否可行?
"任何", "水果", "蔬菜", "肉类"
,并且下拉列表默认为"任何"
,如何在JqGrid事件loadComplete
中将其更改为"水果"
?针对select2版本 >= 4.0.0
其他解决方案可能无效,但以下示例应该有效。
$('select').val('1').trigger('change');
$('select').val('1').trigger('change.select2');
参见这个jsfiddle,其中有相关示例。感谢@minlare提供的第二种解决方案。
假设我有一个最好的朋友选择器,上面有人们的名字,如Bob、Bill和John(在这个例子中我假设值与名字相同)。首先,我在我的选择器上初始化了select2:
$('#my-best-friend').select2();
现在我在浏览器中手动选择了 Bob。接下来,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 参数。
您应直接在底层 <select>
元素上调用 .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
现在直接被调用。
所以在 jqGrid 的 loadComplete
中,您可以获取您正在查找的任何值,然后设置 selectbox 值。
从文档中可以看到:
请注意,为了使用此方法,您必须在选项中定义 initSelection 函数,以便 Select2 知道如何将传递给 val() 的对象的 id 转换为它需要呈现选择的完整对象。如果您附加到 select 元素,则已为您提供此函数。
val
调用。 - Jack<select>
是否被转换为select2
控件来进行额外的测试,方法是检查<select>
上是否存在select2-offscreen
类。搜索工具栏的所有元素都有以gs_
前缀开头的ID,并且名称与colModel
中的名称相同。您可以使用getGridParam
获取colModel
。 - Olegselect2
选择器重新创建过滤器栏后进行设置。我今天会再看一下,也许换个角度能解决问题。再次感谢。更新:将代码包装在布尔检查中解决了我的问题,尽管它停止了搜索栏的刷新,而不是再次选择先前的元素。 - Adam K Deanthis.$("#yourSelector").select2("data", { id: 1, text: "Some Text" });
这应该会有所帮助。
value='newValue'
和text='newLabel'
,您应该添加以下代码:
将新选项添加到<select>
中:
var opt = "<option value='newValue' selected ='selected'>" + newLabel+ " </option>";
$(selLocationID).html(opt);
触发 <select>
的变化,选中当前值:
$(selLocationID).val('newValue').trigger("change");
这应该更容易了。
$("#e1").select2("val", ["View" ,"Modify"]);
但请确保你传递的数值已经存在于HTML中。
我想补充第二个答案。如果你已经将选择框渲染成了select2,那么你需要在选择器中反映出来,代码如下:
$("#s2id_originalSelectId").select2("val", "value to select");
你有两个选择 - 正如@PanPipes的回答所述,你可以采取以下措施。
$(element).val(val).trigger('change');
只有当没有将自定义操作绑定到更改事件时,这才是可接受的解决方案。在这种情况下,我使用的解决方案是触发一个select2特定的事件,以更新select2显示的选择。
$(element).val(val).trigger('change.select2');
在设置select2中的一个字符串选项时遇到了一些问题:
使用选项:"option string1 /option":
$('#select').val("string1").change();
但是有一个带值的选项:选项值"E"字符串1 /选项:
$('#select').val("E").change(); // you must enter the Value instead of the string
如果您想同时更改Select2的值和下拉列表的文本表示,针对V4版本,需要进行以下操作。
var intValueOfFruit = 1;
var selectOption = new Option("Fruit", intValueOfFruit, true, true);
$('#select').append(selectOption).trigger('change');
执行此操作
$('select#id').val(selectYear).select2();
change
事件(例如重新加载表单)时,这才是可接受的解决方案。否则,在触发change()
后,这些操作将被冗余地调用。 - van_folmert