我给的是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
},
答案 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。