使用AJAX调用在select2中设置默认值?

时间:2014-03-13 23:24:53

标签: javascript php jquery jquery-select2

我有两个例子。

这个是带有静态输入的普通select2,它可以预先使用默认字段: http://jsfiddle.net/z96Ca/2/

接下来是一个带有ajax调用的select2,默认值没有添加到框中 - 为什么?! http://jsfiddle.net/z96Ca/1/

我已经摆弄了一段时间,但是在有ajax调用时也无法预先知道如何添加值。

这是通常预先添加代码的行:

$(test).val(["test1","test2"]).trigger("change");

希望我足够清楚

非常感谢

1 个答案:

答案 0 :(得分:29)

由于您使用输入元素而不是select元素支持Select2,并且它允许多个选择,我相信您需要定义initSelection函数。

添加以下选项:

initSelection: function (element, callback) {
    callback($.map(element.val().split(','), function (id) {
        return { id: id, text: id };
    }));
}

jsfiddle


注意:而不是调用以下内容:

$(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功能。

jsfiddle

注意:Select2确实有一个&#34;完整&#34;支持一些向后兼容性的版本。这也可能是一种选择。