如何在jquery-select2中的sorter函数中获取查询字符串或容器

时间:2015-11-05 14:57:15

标签: jquery-select2

有没有办法在分拣机功能中获取查询字符串或我附加的元素select2?我在页面上有多个下拉列表,因此获取查询字符串将不会这样:

$('.select2-search__field').val().toLowerCase() 

我正在使用本地数据集,因此选项已经在下拉列表中。

$('.js-select').select2({
    sorter: select2Sorter
});

function select2Sorter(results) {
   ...
}

1 个答案:

答案 0 :(得分:1)

对你的问题的简单回答是" no"。您无法从sorter函数

引用任何select2 inners

为什么会这样?

如果您查看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