jQuery select поиск по содержимому. как вернуть начальное состояние элемента?
Есть у меня select на странице, в котором очень много элементов. Я реализовал это следующим образом
//jQuery extension method:
jQuery.fn.filterByText = function (textbox) {
return this.each(function () {
var select = this;
var options = [];
$(select).find('option').each(function () {
options.push({
value: $(this).val(),
text: $(this).text()
});
});
$(select).data('options', options);
$(textbox).bind('change keyup', function () {
var options = $(select).empty().data('options');
var search = $.trim($(this).val()).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
if (search.length < 2)
return;
var regex = new RegExp(search, "gi");
$.each(options, function (i) {
var option = options[i];
if (option.text.match(regex) !== null) {
$(select).append(
$('<option>').text(option.text).val(option.value)
);
}
});
});
});
};
Первая проблема в том, что список не возвращается в начальное состояние при стирании текста в строке поиска (элемент над select)
Вторая проблема в том, что если ввести точное название и останется только один элемент, то даже если его выбрать, валидация говорит, что элемент не выбран (т.е. надо обязательно выбирать хотябы из двух)
Есть ли какие либо варианты исправить данные проблемы?
Ответы (1 шт):
Мне кажется Вы делаете, то что уже сделано до Вас=) Попробуйте использовать библиотеку selectize. (https://selectize.github.io/selectize.js/)
Там как раз то что Вам нужно, и поиск по элементам тоже.
