【问题标题】:Setting default values in select2 with AJAX call?使用 AJAX 调用在 select2 中设置默认值?
【发布时间】:2014-03-13 23:24:52
【问题描述】:

我有两个例子。

这是一个带有静态输入的普通 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


    【解决方案1】:

    由于您使用输入元素而不是选择元素支持 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 选项。


    更新:Select2 v4

    使用 Select2 v4 时,您应该始终使用 <select> 元素支持 Select2 控件,而不是隐藏输入。

    <select id="test" style="width: 300px;" multiple="multiple">
    </select>
    

    注意:您仍然可以在选项中指定multiple: true,但您也可以使用&lt;select&gt; 元素的multiple 属性。

    您可以通过在 html 中包含选定选项或以编程方式将选定选项添加到 &lt;select&gt; 元素来设置默认值,之后您应该在元素上触发更改事件,以便更新其显示。

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

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

    jsfiddle

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

    【讨论】:

    • 谢谢约翰 - 等我有时间我会看看我能不能让它工作!很快就会回来报告。
    • 这是一个很好的解决方案,我正在寻找。非常感谢!
    • Select2 最新版本的这个答案有什么更新吗?
    • @JackNicholson - 我更新了 Select2 v4 的答案。
    • 这是唯一对我有用的解决方案,谢谢。
    【解决方案2】:

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

    【讨论】:

    • 最好对答案发表评论,也许 John S 会更新他的答案。
    • 我需要 50 声望才能对答案发表评论,因此我将其发布为不同的答案,我认为这些信息会对尝试使用最新版本的相同解决方案的人有用。
    • 绝对!我让约翰知道,他已经更新了他对他有好处的最新版本的答案。 :)
    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2014-12-08
    相关资源
    最近更新 更多