我已将select2升级到版本4.当我打开select2并输入搜索文本时,列表会根据我输入的内容进行过滤。
这是HTML
<select style="width: 100%;" id="fruit" multiple required>
<option value="1">Apple</option>
<option value="2">Pear</option>
<option value="3">Watermelon</option>
<option value="4">Melon</option>
<option value="5">Pineapple</option>
<option value="6">Orange</option>
<option value="7">Kiwi</option>
<option value="8">Banana</option>
<option value="9">Papaya</option>
<option value="10">Tangerine</option>
</select>
这是针对JS
$(document).on('ready', function() {
function matchCustom(params, data) {
if ($.trim(params.term) === '') {
return data;
}
if (typeof data.text === 'undefined') {
return null;
}
var terms = params.term.split(" ");
for (var i=0; i < terms.length; i++){
if (data.text.toLowerCase().indexOf(terms[i].toLowerCase()) === -1) {
return null;
}
}
return data;
}
$('select').select2({
matcher: matchCustom,
closeOnSelect: false,
multiple: true
});
var last_search = '';
$('select').on('select2:open', function () {
if (last_search != "") {
$('#fruit').select2('search', last_search);
$('.select2-search__field').val(last_search);
}
});
$(document).on('keyup', '.select2-search__field', function () {
var text = $('.select2-search__field').val();
last_search = text;
});
});
初始显示
当我输入时,这就是设计
在我选择了我想要的内容后,列表仍处于打开状态,搜索文本不会消失。这不是一个问题。但是,当我点击另一个地方(导致我的select2列表消失)并再次点击select2字段时,就会发生这种情况。
最后一个搜索值是“ap”。该列表仅包含单词中具有“ap”的值。但是,搜索文本存在。 “ap”值未按预期显示在搜索文本中。此代码$('.select2-search__field').val(last_search);
无法按预期工作。
我还尝试删除位于select2 open事件内的代码$('#fruit').select2('search', last_search);
。当我第二次打开select2字段时,我遇到了另一个问题。
“ap”值是关闭select2列表之前的最后一次搜索。当我重新打开时,“ap”值显示在搜索文本中是正确的。但是,列表不会根据我搜索的内容进行过滤。
重新打开select2字段后,我想要的结果是搜索值显示和列表仅过滤我搜索的内容。我一直在寻找这个好几个小时。有什么我想念的吗?