select2 - 获取当前搜索文本

时间:2014-01-13 17:25:18

标签: 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);
};

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

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

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

5 个答案:

答案 0 :(得分:6)

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

$( “#mySelect2”)。数据( “SELECT2”)。下拉菜单。$ search.val()

答案 1 :(得分:5)

隐藏的输入元素(初始化select2的位置)获取数据属性select2,其中包含select2使用的所有元素的引用。所以你可以这样做:

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

if($(searchInput).val() === '')
    clearTimeout(recipientsTimeout);

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

答案 2 :(得分:2)

在select2版 4.0.3 中,这适用于我,而其他版本则不适用:

$('.select2-search__field')[0].value;

答案 3 :(得分:0)

我做这样的事情来获得当前的搜索词:

list.data("select2").search[0].value;

答案 4 :(得分:0)

我正在使用4.0.6

这对我有用:

$(".select2-search__field").eq(0).val();