我有两个例子。
这个是带有静态输入的普通select2,它可以预先使用默认字段: http://jsfiddle.net/z96Ca/2/
接下来是一个带有ajax调用的select2,默认值没有添加到框中 - 为什么?! http://jsfiddle.net/z96Ca/1/
我已经摆弄了一段时间,但是在有ajax调用时也无法预先知道如何添加值。
这是通常预先添加代码的行:
$(test).val(["test1","test2"]).trigger("change");
希望我足够清楚
非常感谢
答案 0 :(得分:29)
由于您使用输入元素而不是select元素支持Select2,并且它允许多个选择,我相信您需要定义initSelection
函数。
添加以下选项:
initSelection: function (element, callback) {
callback($.map(element.val().split(','), function (id) {
return { id: id, text: id };
}));
}
注意:而不是调用以下内容:
$(test).val(["test1","test2"]).trigger("change");
你可以这样称呼:
$(test).select2('val', ["test1","test2"], true);
如果在不定义initSelection
函数的情况下执行此操作,则会出现以下错误:
错误:错误:如果未定义initSelection(),则无法调用val()
注意:我认为你的第一个(非ajax)示例在没有定义initSelection
函数的情况下工作的原因是因为它指定了tags
选项。
更新:选择2 v4
使用Select2 v4时,应始终使用<select>
元素支持Select2控件,而不是隐藏输入。
<select id="test" style="width: 300px;" multiple="multiple">
</select>
注意:您仍然可以在选项中指定multiple: true
,但您也可以使用multiple
元素的<select>
属性。
您可以通过在html中包含所选选项或通过以编程方式将所选选项添加到<select>
元素来设置默认值,之后您应该在元素上触发更改事件,以便更新其显示。
$test.append('<option value="initial1" selected="selected">initial1</option>');
$test.append('<option value="initial2" selected="selected">initial2</option>');
$test.trigger('change');
在这种情况下,不再需要(或允许)initSelection
功能。
注意:Select2确实有一个&#34;完整&#34;支持一些向后兼容性的版本。这也可能是一种选择。