select2 - 获取当前搜索文本

Ada*_*kis 4 javascript jquery-select2

我正在使用select2并使用此查询功能从服务器获取可用选项

var recipientsTimeout;
this.loadRecipients = function (query) {
    clearTimeout(recipientsTimeout);
    recipientsTimeout = setTimeout(function(){
        data.transmitRequest('lookupcontacts', { search: query.term }, function(resp){
            query.callback({ results: resp.items });
        });
    }, 500);
};
Run Code Online (Sandbox Code Playgroud)

它使用我们自己的ajax层,并延迟搜索,直到用户停止输入,它工作正常.唯一的小问题是,如果用户键入一些文本,然后立即在其上退格,我的上一次超时仍将触发,并且将触发ajax请求,并将其忽略.这不会导致任何问题,但它不是最佳的.

是否有任何(最好是非脆弱的)方法来获取当前文本的内容?似乎query发送的对象有一个元素属性,它是我设置select2的原始隐藏输入的jQuery包装,但是没有直接的方法可以看到用户输入的实际文本框.显然我可以检查它并轻松找出dom模式并从隐藏元素构建一个选择器回到用户输入的内容,但我真的很讨厌这样做,因为特定的布局在未来的版本中很容易改变.

那么获取当前输入文本的最佳方法是什么,所以我可以在setTimeout到期时快速检查它,并且我即将运行我的ajax请求.

Jav*_*ier 8

我正在使用4.0.3,我这样做是这样的:

$( "#mySelect2").数据( "选择2").下拉菜单.$ search.val()

  • 对我来说,它是“v4.0.12”中的“$select.data('select2').selection.$search.val()” (2认同)

Jan*_*Jan 5

隐藏的输入元素(初始化select2的位置)获取一个data属性select2,该属性包含select2使用的所有元素的引用.所以你可以这样做:

var hiddenInputSelector = '#e1',
    select2 = $(hiddenInputSelector).data('select2'),
    searchInput = select2.search;

if($(searchInput).val() === '')
    clearTimeout(recipientsTimeout);
Run Code Online (Sandbox Code Playgroud)

但这不在文档中,因此将来可能会发生变化.