jQuery Select2 占位符在定义内联时不起作用?

jQuery Select2 placeholder doesn't work when defined inline?

我使用 select2 定义了以下多个下拉列表,但占位符不起作用?

<select class="js-select2" multiple="multiple" placeholder="Select State">
     <option value="AK">Alaska</option>
     <option value="HI">Hawaii</option>
</select>

<select class="js-select2" multiple="multiple" placeholder="Select Fruits">
     <option value="Apples">Apples</option>
     <option value="Oranges">Oranges</option>
</select>

<script>
    $(".js-select2").select2({
      // placeholder: 'Select an option...'
   });

</script>

仅当我在 select2 选项列表(上面已注释掉)中定义占位符时才有效,但我想使用单个 class 来初始化所有 select2 多选下拉菜单并显示不同的占位符。

有可能实现吗?

为了快速解决问题,您可以将属性的值传递给占位符选项:

 $(".js-select2").each(function() {
    $(this).select2({
       placeholder: $(this).attr('placeholder')
   });
 });

这在直接使用 $(".js-select2").select2() 时不起作用,我假设在那个上下文中 this 没有指向正确的对象(或类似的东西)。但是如果你使用 each 循环分别在每个元素上初始化它,它就可以工作。

https://jsfiddle.net/84whaced/


或者,如果您在 HTML 中使用 data-placeholder,它应该可以工作(令人惊讶的是,一旦我们检查了文档,我们就会发现,对吧?),参见 https://select2.github.io/options.html#data-attributes - https://jsfiddle.net/84whaced/1/

我认为这是首选。

您可以为每个 select

使用不同的占位符 data-placeholder
$('select').select2({
    placeholder: function(){
        $(this).data('placeholder');
    }
});

<select class="js-select2" multiple="multiple"  data-placeholder="Select State">
     <option value="AK">Alaska</option>
     <option value="HI">Hawaii</option>
</select>

<select class="js-select2" multiple="multiple"  data-placeholder="Select Fruits">
     <option value="Apples">Apples</option>
     <option value="Oranges">Oranges</option>
</select>

您也可以查看 Demo

它将作为:

如果我们只设置属性,例如$("#state").attr('data-placeholder', 'Select State'),不会有影响。

但是,如果我们设置 attr 然后不带参数调用 $("#state").select2(),则占位符会更新。

$("#state").attr("data-placeholder","Select State");
$("#state").select2();

也许您的网页上有类似的 id。 JS 会默认 select latest id。尝试改变它们。