2014-07-12 74 views
4

我正在嘗試使用select2庫的自定義匹配器。具體來說,我想返回other作爲未找到的選項,以及只匹配從字符串的開頭。我發現下面的哪個單獨回答每個部分的做題:Select2 Custom Matcher

Select2, when no option matches, "other" should appear

jquery select2 plugin how to get only the result 'myString%'

然而,當我結合這兩種技術,它不再匹配正確。我的解決方案如下所示:

$("#myForm").select2({ 
    minimumInputLength: 2, 
    width: width, 
    matcher: function(term, text) { 
     // THIS IS WHERE I COMBINE THE METHODS 
     return text === 'Other' || text.toUpperCase().indexOf(term.toUpperCase())==0; 
    }, 
    sortResults: function(results) { 
     if (results.length > 1) results.pop(); 
      return results; 
    } 
}); 

我在做什麼錯,什麼是使這個匹配器功能的正確方法?

回答

3

我使用正則表達式並將條件||分爲兩步完成此操作。最終代碼是:

$("#myForm").select2({ 
    minimumInputLength: 2, 
    width: width, 
    matcher: function(term, text) { 
     var terms = term.split(" "); 
     for (var i=0; i < terms.length; i++){ 
      var tester = new RegExp("\\b" + terms[i], 'i'); 
      if (tester.test(text) == false){ 
       return (text === 'Other') 
      } 
     } 
     return true; 
    }, 
    sortResults: function(results) { 
     if (results.length > 1) { 
      results.pop(); 
     } 
     return results; 
    }, 
});