Ввод значений в jquery-select2, которых нет в списке выбора

У меня есть пример использования, когда я позволяю людям вводить значения в текстовое поле плагина select2, который делает не появится в списке выбора.

В одном случае я предоставляю проверку и не отправляю, если у пользователя не выбран действительный элемент, но пока они этого не сделают, я не хочу очищать их значения. Поле выбора может содержать 1,00, 1,50, 1,75, NA, ABS, и пользователь только что набрал 1,80. Это недопустимое значение, но я не хочу потерять их изменения, я отмечу это поле как недействительное и позволю им исправить свои изменения. Я не хочу добавлять 1,80 в поле выбора, так как это недопустимое значение, но я также не хочу его очищать.

Как можно этого добиться?


person Aran Mulholland    schedule 13.05.2013    source источник
comment
Хороший вопрос. Сохранение переходных правок пользователя и их проверка — это правильная обработка данных.   -  person Thomas W    schedule 13.05.2013
comment
Начиная с версии 4.0.0, Select2 поддерживает пользовательские значения через $('xyz').select2({tags: true}), который не поддерживает проверку. Однако вы можете отформатировать значение, чтобы указать, что оно недопустимо. См. stackoverflow.com/a/30021059/192092.   -  person Roy Hyunjin Han    schedule 22.05.2015


Ответы (1)


Если вы выполняете проверку в JS, в Select2 есть пример динамической загрузки/генерации данных, который переопределяет query(), просто повторяя ввод пользователя.

См.: http://ivaynberg.github.io/select2/ "Загрузка данных"

Я решил аналогичную проблему (на стороне сервера) с помощью «автозаполнения» пользовательского интерфейса JQuery. Здесь я использовал подход возврата объектов, заключающих как ярлык с возможным пояснительным сообщением, текстовое значение без оформления, так и комбинированное значение идентификатора и флаг состояния< /эм>. Я переопределил select, чтобы сохранить текст и идентификатор в скрытых полях.

В моем случае я делал различие между существующими клиентами для ссылки и созданием нового клиента с введенным именем. Я смог довольно красиво перечислить варианты сопоставления существующих клиентов или создания «ABC New Customer»:

Пользователь вводит: «Алфавитный суп» и видит выбор:

  • Альфа-упаковка
  • Суп Кэмпбеллс
  • приготовить "Алфавитный суп"

Подобная техника может быть применима и к вам. Надеюсь это поможет.

person Thomas W    schedule 13.05.2013
comment
Я заметил, что при использовании этого подхода моя реализация ajax игнорируется. Есть ли способ вызвать мою логику ajax до или после выполнения query? - person Maksim Vi.; 25.10.2013
comment
@МаксимВи. query — это основной API источников данных, ajax — это ярлык для общих источников данных AJAX/JSONP. Это альтернативные способы предоставления источника данных, очевидно, что Select2 не имеет смысла вызывать оба! Если вы хотите использовать AJAX вручную, поместите его в код обработчика query. - person Thomas W; 25.10.2013
comment
@ThomasW Я просто хочу повторно использовать логику, представленную в объекте ajax (вызовите ее вручную). - person Maksim Vi.; 25.10.2013
comment
Было бы очень приятно увидеть вашу реализацию query! - person Charles Wood; 22.11.2013