Усовершенствуйте свой Select2: простые способы добавления типизированных значений

Select2 — мощная библиотека JavaScript, расширяющая функциональность элементов выбора HTML. Он обеспечивает удобный интерфейс, функцию поиска и различные параметры настройки. Одним из общих требований является возможность добавлять типизированные значения в раскрывающийся список. В этой статье мы рассмотрим несколько способов достижения этой цели, используя разговорный язык и попутно предоставляя примеры кода.

Метод 1: использование события select2:selecting
Событие select2:selecting запускается непосредственно перед выполнением выбора. Мы можем захватить введенное значение в этом событии, добавить его в раскрывающийся список, а затем инициировать выбор. Вот пример:

$('#mySelect').on('select2:selecting', function (e) {
  var typedValue = e.params.args.data.text;
  $(this).append('<option value="' + typedValue + '">' + typedValue + '</option>');
});

Метод 2: расширение select2.defaults
Другой подход заключается в расширении объекта select2.defaults с помощью специальной функции сопоставления. Эта функция проверит, существует ли введенное значение в раскрывающемся списке, и если нет, добавит его. Вот пример:

$.fn.select2.defaults.set('matcher', function(params, data) {
  var term = $.trim(params.term);
  if (term === '') {
    return data;
  }
  if ($(data.element).length === 0) {
    return {
      id: term,
      text: term
    };
  }
  return data;
});

Метод 3: изменение функции select2.ajax
Если вы используете функцию AJAX select2, вы можете изменить функцию select2.ajax, чтобы добавлять введенное значение к результатам. Вот пример:

$('#mySelect').select2({
  ajax: {
    url: '/search',
    dataType: 'json',
    processResults: function (data) {
      var term = $('#mySelect').val().trim();
      if (term !== '' && !data.find(obj => obj.text === term)) {
        data.push({ id: term, text: term });
      }
      return {
        results: data
      };
    }
  }
});

Добавление введенных значений в раскрывающиеся списки Select2 может значительно улучшить взаимодействие с пользователем и обеспечить большую гибкость при вводе в форму. В этой статье мы рассмотрели три метода достижения этой цели: использование события select2:selecting, расширение объекта select2.defaults и изменение функции select2.ajax. Выберите метод, который лучше всего соответствует требованиям вашего проекта, и начните расширять возможности своего Select2!