Ввод значений в jquery-select2, которых нет в списке выбора
У меня есть прецедент, когда я разрешаю людям вводить значения в текстовое поле select2 плагин которые не отображаются в списке выбора.
в одном случае я предоставляю проверку и не отправляю, если у пользователя нет выбранного допустимого элемента, но пока они этого не сделают, я не хочу очищать их значения. Поле выбора может содержать 1.00, 1.50, 1.75, NA, ABS, и пользователь только что набрал 1.80. Это недопустимое значение, но я не хочу терять свои изменения, я буду отмечать это поле недействительно и позволяет им исправлять свои изменения. Я не хочу добавлять 1.80 в поле выбора, поскольку это недопустимое значение, но я также не хочу его очищать.
Как этого можно достичь?
2 ответов
Если вы проверяете в JS, Select2 имеет пример динамической загрузки / генерации данных, который переопределяет query (), чтобы просто повторить ввод пользователя.
см.:http://ivaynberg.github.io/select2/ 'Загрузка Данных'
Я решил аналогичную проблему (на стороне сервера) с помощью jQuery UI "автозаполнение". Здесь я взял подход возврата объектов, обертывающих оба a метка с возможным пояснительным сообщением, a текст стоимостью без украшение и комбинированное ID значение & флаг состояния. Я переехал!--0--> сохранить текст & ID для скрытых полей.
в моем случае я различал существующих клиентов ссылка, или создание нового клиента с введенным именем. Я смог перечислить варианты сопоставления существующих клиентов или создания "нового клиента ABC", довольно красиво:
пользователь вводит: "Алфавитный суп" и видит выбор из:
- Альфа Упаковка
- Кэмпбеллс Суп
- создать "алфавит суп"
аналогичный метод может быть применим и к вам. Надеюсь, это поможет.
$(document).ready(function() {
var items = [{id: "1", text: "some_available_text"}];
$("#hidden_input_for_select2").select2({
query: function (query) {
var data = {results: []};
if(query.term.length > 0){
data.results.push({id: 0, text: query.term });
}
$.each(items, function(){
if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
data.results.push({id: this.id, text: this.text });
}
});
query.callback(data);
}
});
});