Select2 не показывает заполнитель, если изначально скрыт - PullRequest
0 голосов
/ 05 июня 2018

При использовании Select2 для изначально скрытого <select> с несколькими атрибутами заполнитель не отображается.Глядя на код, я вижу, что селектор .select2-container--default .select2-search--inline .select2-search__field имеет ширину 0 пикселей (угадайте, потому что он скрыт).

$('[data-trigger="open"]').on('click', function(){
	$('[data-target="open"]').toggleClass('hidden');
})

$('.select2').select2({
	width: '100%'
});
.hidden {
  display:none;
}
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js"></script>

<p><a href="#" data-trigger="open">Open Select2 and watch no placeholder...</a></p>
<div class="hidden" data-target="open">
  <select name="select" id="select" class="select2" multiple data-placeholder="Select one or more...">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
  </select>
</div>

Применение правила CSS width: 100% !important только частично решает проблему: появляется заполнитель, но поле ввода увеличивается с каждым выбором элемента

$('[data-trigger="open"]').on('click', function(){
	$('[data-target="open"]').toggleClass('hidden');
})

$('.select2').select2({
	width: '200px' // limit size to make the "growing "problem appear
});
.hidden {
  display:none;
}

.select2-container--default .select2-search--inline .select2-search__field {
  width: 100% !important;
}
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js"></script>

<p><a href="#" data-trigger="open">Open Select2: placeholder ok, but field grows abnormally when inserting items...</a></p>
<div class="hidden" data-target="open">
  <select name="select" id="select" class="select2" multiple data-placeholder="Select one or more...">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
  </select>
</div>

Пожалуйста, любая помощь?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Добавьте ниже css на свою страницу

.select2-selection--multiple .select2-search__field{
  width:100%!important;
}
0 голосов
/ 05 июня 2018

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

Посмотрите на пример ниже.

$('[data-trigger="open"]').on('click', function() {
  $('[data-target="open"]').toggleClass('hidden');
})

$('.select2').select2({
  width: '100%',
  placeholder: function() {
    $(this).data('placeholder');
  }
});

$('.select2').parent().addClass("hidden")
.hidden {
  display: none;
}
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js"></script>

<p><a href="#" data-trigger="open">Open Select2 and watch no placeholder...</a></p>
<div class="" data-target="open">
  <select name="select" id="select" class="select2" multiple data-placeholder="Select one or more...">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
  </select>
</div>
...