2016-07-18 44 views
1

我想用select2插件使用自定義匹配器,但我得到一個錯誤「text.toUpperCase()」未定義。我已經遵循了這些例子,但無法實現。任何幫助,將不勝感激。我的代碼如下:select2自定義匹配器toUpperCase未定義

<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" /> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.full.min.js"></script> 
<script type="text/javascript"> 
    $('.selectpicker').select2({ 
    placeholder: 'Select an option', 
    matcher: function(term, text) { 
     var has = true; 
     var words = term.toUpperCase().split(" "); 
     for (var i =0; i < words.length; i++){ 
     var word = words[i]; 
     has = has && (text.toUpperCase().indexOf(word) >= 0); 
     } 
     return has; 
    } 
    }); 
</script> 
+0

你使用的是什麼版本:v4或v3? – Shrike

回答

0

也許你使用v3作爲你的匹配器簽名。

我建議正常化輸入參數,以確保它們都是字符串:

matcher: function(term, text) { 
    var has = true; 
    var words = ("" + term).toUpperCase().split(" "); 
    for (var i =0; i < words.length; i++){ 
    var word = words[i]; 
    has = has && (("" + text).toUpperCase().indexOf(word) >= 0); 
    } 
    return has; 
} 
0

我使用作爲JS腳本源URL定義V4。我會嘗試你的想法,首先正常化內容。不知道爲什麼它不起作用,因爲它遵循的例子。

是什麼讓你認爲匹配器簽名是錯誤的?

+0

因爲默認匹配具有不同的簽名: 功能匹配(參數,可以數據){// 總是返回的對象,如果有什麼比較 如果($ .trim(params.term)===「」){ 回報數據; } – Shrike