select2 4.0 - 始终为远程数据结果添加选项

时间:2015-05-13 08:37:05

标签: jquery-select2-4

我给的是3.5 - > 4.0升级另一个去&几乎'让这个用例像它一样工作。我现在坚持的是如何总是在ajax结果列表中添加某个选项。

这就是我现在所拥有的:

HTML:

<select id="vedit-filter" name="settings[filter]" class="form-control select2">
    <option value="default" selected="">default</option>
</select>

JS:

$("#vedit-filter").select2({
    placeholder: "Select or enter application...",
    allowClear: true,
    multiple: false,
    tags: true,
    ajax: {
        dataType: 'json',
        delay: 1000,
        type: 'post',
        url: '/process/get_application_list.php',
        data: function (term, page) {
            return {
                term: term, // search term
                page_limit: 25, // page size
                page: page // page number
            };
        },
        results: function (data, page) {
            var more = (page * 25) < data.total; // whether or not there are more results available
            return {
                results: data.results,
                more: more
            };
        }
    }
});

这将加载&#39;默认&#39;作为初始选择的选项。如果用户改变了它,那么它就消失了。如果需要,我希望他们能够恢复到初始选择。唯一的方法是将它作为一个选项包含在我从ajax返回的结果中吗?或者有没有办法在js方面做到这一点?

更新

默认选择将始终为动态,但在此示例中,我们使用的值为&#39;默认&#39;。

<select id="vedit-filter" name="settings[filter]" class="form-control select2">
    <option value="default" selected="">default</option>
</select>

然后在js:

var default_filter = $("#vedit-filter").val(); //get the default loaded from the html

placeholder: {
  id: default_filter, // or whatever the placeholder value is
  text: default_filter // the text to display as the placeholder
},

1 个答案:

答案 0 :(得分:1)

我最近explained this on GitHub但没有意识到它发生了多大的改变。

  

如果需要,我希望他们能够恢复到初始选择。

Select2提供placeholder选项,如果尚未进行选择,则可以允许您为用户指定“选择项目”等占位符。为了支持<select>,它将默认选择第一个选项(由浏览器完成),Select2要求存在“占位符”<option>。这也是Select2用于确定是否需要显示占位符的选项的两倍。

除了placeholder选项之外,Select2还允许用户删除他们选择的选项,这会将选择还原为占位符选项。这可以通过allowClear选项启用。

  

将ajax作为选项包含在我返回的结果中的唯一方法是什么?或者有没有办法在js方面做到这一点?

在您的示例中,您使用的是占位符选项,其上设置了value。因为Select2期望value默认为空/空,所以您需要告诉Select2在检测占位符时要查找的内容。这可以通过将数据对象传递到Select placeholder来完成,Select2将在检查时使用。

placeholder: {
  id: 'default', // or whatever the placeholder value is
  text: 'Select or enter application...' // the text to display as the placeholder
}

这会告诉Select2在value设置为default时显示占位符,在您的示例中,它显示为占位符/默认选项。

  

我现在坚持的是如何总是在ajax结果列表中添加某个选项。

虽然我认为我们可能已经解决了the XY problem here,但我确实想要注意,在AJAX结果列表中添加一个新选项就像覆盖processResults一样简单。这是因为processResults将数据对象列表直接传递给Select2,这为您提供了一个安全的位置,可以将新选项注入到列表中。

您只需将.push额外数据对象放入results,然后将其传递回Select2。