Условное добавление параметра параметров тегов в select2

#html #jquery #jquery-select2

#HTML #jquery #jquery-select2

Вопрос:

У меня есть несколько элементов на странице, которые запускают загрузку select2 в элемент. Я пытаюсь условно проверить, имеет ли элемент определенный класс, и если да, добавьте tag опцию; в противном случае этого не делайте. Я думал, что что-то подобное сработает, но это не так:

 $('.element_to_add_select_two_on').select2({
    tags:function(element) {
        return (element.className === 'classname_i_am_targeting');
    },
});
  

Чего мне здесь не хватает? Я подвергаю себя следующей буффонаде, чтобы настроить таргетинг и загрузить:

 $('.element_to_add_select_two_on').each((index,element) => {
    let showTags = false;

    if ($(element).attr('class').split(' ').includes('classname_i_am_targeting')) {
        showTags = true;
    }

    $(element).select2({
        tags:showTags,
    });
});
  

Комментарии:

1. Вы хотите сказать, что вторая часть кода работает, но не первая?

2. Точно. @JasonRoman

3. Привет, @Zach Smith, мой ответ в конечном итоге сработал для вас?

Ответ №1:

При первой попытке возникает несколько проблем. Во-первых, вы определяете tags как функцию, когда то, что вы хотите, является результатом функции, поскольку tags должно быть определено как логическое значение true или false. Другой заключается в том, что внутри вашего .select2() вызова у вас нет доступа к вызывающему элементу $('.element_to_add_select_two_on') так, как вы думаете. Это не событие, которое вы прослушиваете, это вызов функции, который хочет передать объект с его конфигурацией.

Вы сообщили, что ваш второй метод работает, но его можно упростить с hasClass() помощью функции jQuery:

 $('.element_to_add_select_two_on').each((index, element) => {
  $(element).select2({
    tags: $(element).hasClass('classname_i_am_targeting'),
  });
});
  

Однако существует гораздо более простой способ сделать все это, и он гораздо более гибкий и уже встроен в select2 с помощью атрибутов data- * (обратите внимание, вам нужен jQuery> 1.x). Вы можете просто добавить data-tags="true" в любой из ваших select элементов, с которыми вы хотите включить теги. Они переопределят любые параметры конфигурации, используемые при инициализации select2, а также любые значения по умолчанию:

 <select data-tags="true">
    ...
</select>
  

Комментарии:

1. Спасибо за упрощенный jQuery. Этот аспект отлично работает. Таргетинг с помощью data-attr логики звучит здорово, но не работает для моей настройки. Это может быть по разным причинам, связанным исключительно с реализацией select2 , которую я использую.