2014-01-13 49 views
3

我使用的是选择2和取出由服务器可用的选项与此查询功能当前的搜索文本选择2 - 让

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请求。

回答

4

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

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

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

这不是在文档的,所以它可能在未来改变。

0

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

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

在选择2版本4.0.3 对我的作品,而另一些则没有:

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

我使用4.0.3和我做的方式是这样的:

$(“#mySelect2”)。data(“select2”)。dropdown。$ search.val()