我正在使用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请求。
答案 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();