Ответ на сообщение OP, в дополнение к ответу, предложенному @ Rock'n'muse, безусловно, является хорошим предложением, но оба не имеют важного и желаемого функционального аспекта.
При использовании раствора, данное @Mat и реализации change
-vice- close
предложение от @ Rock'n'muse, набранное в значение действительно очищает от виджета, если выбор не сделан из фильтруемого источника данных. Отлично; однако, если пользователь вводит что-то действительное и выбирает значение из отфильтрованного списка, затем помещает курсор в конец значения и набирает что-то, что сейчас делает недействительным значение (не возвращает никаких действительных выборов из источник данных), введенное значение не удаляется из виджета.
Что происходит, то значение isValid
остается true
, если ранее введенное (и действительное) значение должно быть изменено. Решением этого является установка isValid
на false
, как только будет инициировано событие фильтрации. Когда пользователь изменяет введенное значение, виджет пытается отфильтровать источник данных в поисках введенного значения. Установка isValid
на false
, как только запускается событие filter
, обеспечивает «чистый сланец» для события change
, как это было предложено решением от @ Rock'n'muse.
Поскольку мы устанавливаем isValid
ложь, как только filtering
событие срабатывает, мы не должны делать это в open
случае (как источника данных фильтрации должно произойти до того, как пользователь никогда не увидит возможность выбора) , Из-за этого связь @была удалена из решения @ Mat. Это также означает, что первоначальное присвоение false
по объявлению isValid
является излишним, но присвоение переменной при объявлении всегда является хорошей идеей.
Ниже раствор из @Mat вместе с предложениями от @ Rock'n'muse и с filtering
реализации применяются:
var isValid = false;
$("#staton").kendoAutoComplete({
minLength: 2,
dataTextField: "name",
select: function() {
valid = true;
},
change: function (e) {
// if no valid selection - clear input
if (!valid) {
e.sender.value("");
}
},
filtering: function() {
valid = false;
},
dataSource: datasource
});
В качестве приложения, с использованием привязки установить и оценить на select
событие простое логическое значение, поскольку @Mat предлагает много чище, проще и быстрее, чем использование jQuery $.each(...)
на источнике данных, чтобы убедиться, что введенное значение соответствует фактическому элементу источника данных в событии change
. Это была моя первая мысль при работе над решением, прежде чем я нашел решение от @Mat (на этой странице), и такова моя аргументация за голосование за его решение и его вопрос.
Используя этот метод, если пользователь не делает правильный выбор, все, что они набрали в автозаполнение, очищается 'onblur', что является результатом, который я получил после – Mat
. В моих тестах" close "не запускается, если пользователь вводил значение, которое возвращало 0 элементов с сервера. То есть, я набираю «1234 ..», который ничего не извлекает с сервера, а затем выходит из текстового поля, событие «закрыть» не запускается :-( – Dror
Это неправильный ответ. Вы должны использовать «изменение», событие, а не «закрыть». – ataravati