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

问题描述 投票:5回答:2

我有两个例子。

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

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

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

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

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

希望我足够清楚

非常感谢

javascript php jquery jquery-select2
2个回答
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>元素来设置默认值,之后您应该在元素上触发change-event以更新其显示。

$test.append('<option value="initial1" selected="selected">initial1</option>');
$test.append('<option value="initial2" selected="selected">initial2</option>');
$test.trigger('change');

在这种情况下,不再需要(或允许)initSelection函数。

jsfiddle

注意:Select2确实有一个“完整”版本,支持一些向后兼容性。这也可能是一种选择。


3
投票

在较新版本的select2中没有initSelection。

© www.soinside.com 2019 - 2024. All rights reserved.