有没有办法在分拣机功能中获取查询字符串或我附加的元素select2?我在页面上有多个下拉列表,因此获取查询字符串将不会这样:
$('.select2-search__field').val().toLowerCase()
我正在使用本地数据集,因此选项已经在下拉列表中。
$('.js-select').select2({
sorter: select2Sorter
});
function select2Sorter(results) {
...
}
答案 0 :(得分:1)
对你的问题的简单回答是" no"。您无法从sorter
函数
如果您查看select2来源,尤其是result.js
file, line 93,您会看到sort
函数如下所示:
Results.prototype.sort = function (data) {
var sorter = this.options.get('sorter');
return sorter(data);
};
因此,它不会将任何上下文传播到传递的sorter
函数,也不会再提供任何参数。
一种快速而又肮脏的修复方法是覆盖sort
函数以提供this
上下文。这可以通过以下方式完成(假设您拥有select2的*.full.js
版本):
$.fn.select2.amd.require('select2/results').prototype.sort = function (data) {
var sorter = this.options.get("sorter");
// pass the `this` context
return sorter.call(this, data);
};
现在,每次调用sorter
函数时,您都可以访问select2 inners,并且可以执行任何操作,例如。
$('#e1').select2({
sorter: function (data) {
// get the search field of the current select2 element
var $searchField = this.data.$element.data("select2")
.$dropdown.find(".select2-search__field");
// log it's value
console.log($searchField.val());
return data;
}
});
这是一个展示这个概念的JSFiddle。