Проблема Select2 с добавлением класса в контейнер Select2 в экземпляре WooCommerce - PullRequest
0 голосов
/ 13 апреля 2019

Хорошо, у меня есть сайт WordPress / WooCommerce, и я использую Select2 для своих полей выбора, но, похоже, WooCommerce также использует его для своих.

Я создаю экземпляр как таковой:

$('select').not('[multiple]').select2({
    minimumResultsForSearch: Infinity,
    dropdownAutoWidth : true,
});

Затем я также хочу применить другой цвет границы к полям, для которых уже установлено значение, поэтому я добавил этот код:

$('select').each(function(e) {
    handleSelectSelection($(this));
});

function handleSelectSelections(select) {

    var el = (select.next('.select2').length) ? jQuery(select.data('select2').$container) : select;

    if (select.val() !== "" && select.val() !== null) {
        el.addClass('has-selection');
    } else {
        el.removeClass('has-selection');
    }

}

Обратите внимание, что весь код вне функции находится внутри (function($) { wrapper.

Теперь, это прекрасно работает с полями select2, которые создает мой код, однако, похоже, он не работает с полями, созданными WooCommerce.

Я проверил различия в select полей, и я заметил, что у моих полей есть атрибут data-select2-id, в то время как у полей WooCommerce нет.

Я сделал некоторые записи в консоли с jQuery(select.data('select2').$container) на полях WooCommerce, и, тем не менее, это выглядит вполне нормально.

Проверка значений возвращает корректность и даже идет внутри раздела, где он пытается добавить класс, но это просто не удается сделать.

Редактировать: Интересно то, что это работает, если вы связываете это с change событием, но не так.

Есть идеи о том, что здесь происходит?

...