Подтвердить что ты не робот

Добавить класс в элемент select2

Документация ужасна или я чего-то не хватает. Я пытаюсь добавить класс ошибки в поле select2 для проверки формы. Это просто красная рамка 1px.

Я нашел метод containerCssClass в документации, но я не уверен, как его применять.

Я пробовал следующее без везения:

$("#myBox").select2().containerCssClass('error');
4b9b3361

Ответ 1

jQuery использует объекты JSON для инициализации, поэтому я думаю, что это тоже будет:\

$("#myBox").select2({ containerCssClass : "error" });

Если вы хотите добавить/удалить класс, вы можете сделать это после его инициализации

$($("#myBox").select2("container")).addClass("error");
$($("#myBox").select2("container")).removeClass("error");

Вышеуказанная функция получает DOM node основного контейнера select2, например: $("#myBox").select2("container")

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

Ответ 2

Для уже инициализированного элемента select2 я попробовал решение @Niels, но это привело к ошибке: Uncaught TypeError: Cannot read property 'apply' of undefined

Пошел в источник, и вместо этого он работал:

$($('#myBox').data('select2').$container).addClass('error')
$($('#myBox').data('select2').$container).removeClass('error')

Использование select2 v4.0.3 full

Ответ 3

Согласно documentation, containerCssClass является только свойством конструктора. Лучшее, что вы, вероятно, сможете сделать, это повторно инициализировать его, когда вы получите сообщение об ошибке:

$("#myBox").select2({
    containerCssClass: "error" 
});

Примечание от комментариев. Если вы получаете сообщение об ошибке "Нет": нет select2/compat/containerCss (...), вам нужно включить версию select2.full.js вместо основной

Ответ 4

используйте параметр темы.

 $(".select").select2({
        placeholder: "",
        allowClear: false,
        theme: "custom-option-select"
    });

Ответ 5

Самый простой способ:

Создайте родительский класс, например

<div class="select-error">
    <select id="select2" name="select2" data-required class="form-control">
        <option value="" selected>No selected</option>
        <option value="1">First</option>
        <option value="2">Second</option>
    </select>
</div>

когда вы проверяете его с помощью jquery или php, просто добавьте стиль или css в класс .select-error, например

style="border:1px solid red; border-radius: 4px"

Пример jQuery:

$('[data-required]').each(function() {
  if (!$(this).val()) {
    if ($(this).data('select2')) {
      $('.select-error').css({
        'border': '1px solid red',
        'border-radius': '4px'
      });
    }
  });

Ответ 6

Вы можете использовать dropdownCssClass opiton

$("#myBox").select2({
    containerCssClass: "error" 
});