Select2 jqueryプラグインをダウンロードして、すべてセットアップしました。ここに基本的なドロップダウンがあります。
<SELECT NAME="GENDER">
<OPTION VALUE="1">MALE
<OPTION VALUE="2">FEMALE
<OPTION VALUE="3">UNDEFINED
</SELECT>
プラグインを適用しましたが、機能します-問題ありません。
Select2のドキュメントを確認してきましたが、女性や男性などと入力するなど、性別で検索するのではなく、ユーザーに1を押すだけで、男性、女性の場合は2が表示されます。
Select2でこれを試みた人はいますか?
ドキュメントの「matcher」オプションをご覧ください: http://ivaynberg.github.io/select2/#documentation
マッチャー関数をオーバーライドして、指定されたオプションのtext()とval()の両方をチェックします。テストされていない例:
$('select').select2({
matcher: function(term, text, option) {
return text.toUpperCase().indexOf(term.toUpperCase())>=0 || option.val().toUpperCase().indexOf(term.toUpperCase())>=0;
}
});
「マッチャー」オプションのパラメーターは、これが回答されてから変更されました 。米国の州のドロップダウンを実装するときに同じ問題が発生しました。各オプションは<option value="PA">Pennsylvania</option>
のようなもので、ユーザーが州を綴るか、コードを入力するだけで機能するようにしたかったのです。更新されたドキュメントに基づいて、次のように変更しました。
$('select').select2({
matcher: function(params, data) {
// If there are no search terms, return all of the data
if ($.trim(params.term) === '') { return data; }
// Do not display the item if there is no 'text' property
if (typeof data.text === 'undefined') { return null; }
// `params.term` is the user's search term
// `data.id` should be checked against
// `data.text` should be checked against
var q = params.term.toLowerCase();
if (data.text.toLowerCase().indexOf(q) > -1 || data.id.toLowerCase().indexOf(q) > -1) {
return $.extend({}, data, true);
}
// Return `null` if the term should not be displayed
return null;
}
});
これは私が作成した実用的なCodePenデモです これは、OPの選択フィールドと米国の州の選択フィールドの両方を使用してこれを示しています。
上記の@Tessaのすばらしい答えを参考にして、optGroup
で機能するようにしました。
function(params, option) {
// If there are no search terms, return all of the option
var searchTerm = $.trim(params.term);
if (searchTerm === '') { return option; }
// Do not display the item if there is no 'text' property
if (typeof option.text === 'undefined') { return null; }
var searchTermLower = searchTerm.toLowerCase(); // `params.term` is the user's search term
// `option.id` should be checked against
// `option.text` should be checked against
var searchFunction = function(thisOption, searchTerm) {
return thisOption.text.toLowerCase().indexOf(searchTerm) > -1 ||
(thisOption.id && thisOption.id.toLowerCase().indexOf(searchTerm) > -1);
};
if (!option.children) {
//we only need to check this option
return searchFunction(option, searchTermLower) ? option : null;
}
//need to search all the children
option.children = option
.children
.filter(function (childOption) {
return searchFunction(childOption, searchTermLower);
});
return option;
}