Хорошо, у меня есть сайт 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
событием, но не так.
Есть идеи о том, что здесь происходит?