установить ширину ввода select2 (через директиву Angular-ui)


151

У меня проблема с тем, чтобы этот plunkr (select2 + angulat-ui) работал.

http://plnkr.co/edit/NkdWUO?p=preview

В локальной настройке я получаю работу select2, но я не могу установить ширину, как описано в документации . Это слишком узко, чтобы использовать.

введите описание изображения здесь

Спасибо.

РЕДАКТИРОВАТЬ: Неважно, что plnkr, я нашел здесь рабочую скрипку http://jsfiddle.net/pEFy6/

Похоже, что это поведение select2, чтобы свернуть на ширину первого элемента. Я мог бы установить ширину с помощью начальной загрузки. class="input-medium"До сих пор не уверен, почему angular-ui не принимает параметры конфигурации.


Можете ли вы быть более точным в том, что вы уже пробовали? Выбранная библиотека (на которой основан select2) будет генерировать ширину на основе ширины, предоставленной в HTML / CSS.
— Адам Грант

Ответы:


216

Вам необходимо указать атрибут ширины для разрешения, чтобы сохранить ширину элемента

$(document).ready(function() { 
    $("#myselect").select2({ width: 'resolve' });           
});

7
$ ("# myselect"). select2 ({заполнитель: 'Выберите страну', ширина: '192px'}); решил мою проблему с IE и не влияет на FF и Chrome! Спасибо!
— Адриан П.

да. Я также спросил автора github.com/godbasin/vue-select2/issues/11
— shinriyo

232

В моем случае select2 открылся бы правильно, если бы было ноль или более таблеток.

Но если бы была одна или несколько таблеток, и я удалил их все, он уменьшился бы до наименьшей ширины. Мое решение было просто:

$("#myselect").select2({ width: '100%' });      

7
лучший ответ при использовании select2 version 4.0.0
— Steve

1
почему это лучше, чем $ ("# myselect"). select2 ({width: 'resol'}); ? (кажется, то же самое)
— Рикардо Вигатти

1
@RicardoVigatti: width: 'resol' работает только один раз при загрузке страницы, но не при изменении размера. Если вы используете адаптивный дизайн, это не сработает
— Фабиан Шенер,

1
resolveне работает для меня - 100% `сделал. это полчаса безнадежно ищет ответ "решен". спасибо :)
— Дарра Энрайт

1
Это лучший ответ на данный момент. Но теперь для меня поле поиска не заполняет всю ширину. Есть ли простой способ исправить это?
— TNT

48

Это старый вопрос, но новую информацию по-прежнему стоит публиковать ...

Начиная с Select2 версии 3.4.0 есть атрибут, dropdownAutoWidthкоторый решает проблему и обрабатывает все нечетные случаи. Обратите внимание, что он не включен по умолчанию. Он изменяет размер динамически по мере того, как пользователь делает выбор, добавляет ширину, allowClearесли этот атрибут используется, и также корректно обрабатывает текст-заполнитель.

$("#some_select_id").select2({
    dropdownAutoWidth : true
});

Это работает довольно хорошо ... за исключением случаев, когда вы используете заполнители, если вы используете, если ваши параметры меньше заполнителя, текст заполнителя будет усечен :(
— MrPowerGamerBR

24

select2 V4.0.3

<select class="smartsearch" name="search" id="search" style="width:100%;"></select>

11

С> 4.0 из select2 я использую

$("select").select2({
  dropdownAutoWidth: true
});

Эти другие не сработали

  • dropdownCssClass: 'bigdrop'
  • ширина: «100%»
  • ширина: «разрешить»

9

добавьте метод css в ваш скрипт следующим образом:

$("#your_select_id").select2({
      containerCss : {"display":"block"}
});

он установит ширину вашего выбора так же, как ширина вашего div.


1
Это помогло мне (я не смог заставить select2 автоматически изменить размер с помощью Bootstrap 3). Хотя я должен сказать, что это немного глупо.
— mkataja

Это поставило меня на правильный путь, я заменил дисплей на minWidth:$( '.opt-option-type-select' ).select2( { containerCss : { minWidth: '10em', }, } );
— Nabil Kadimi

2

Установка ширины для «разрешения» не работает для меня. Вместо этого я добавил «width: 100%» к своему выбору и изменил CSS следующим образом:

.select2-offscreen {position: fixed !important;}

Это было единственное решение, которое сработало для меня (моя версия 2.2.1). Ваш выбор займет все доступное место, это лучше, чем использовать

class="input-medium"

из начальной загрузки, потому что выборка всегда остается в контейнере, даже после изменения размера окна (отзывчиво)


Спасибо за решение, но оно сработало только при первой загрузке. Как только я выбрал тег, а затем нажал на другой элемент страницы, вход select2 вернулся к неправильному размеру
— Marklar

1

Добавьте опцию разрешения ширины в вашу функцию select2

$(document).ready(function() { 
        $("#myselect").select2({ width: 'resolve' });           
});

После добавления ниже CSS к вашей таблице стилей

.select2-container {
width: 100% !important;
}

Это разобьет проблему


0

Вы можете попробовать вот так. Меня устраивает

$("#MISSION_ID").select2();

При запросе скрытия / показа или ajax мы должны повторно инициализировать плагин select2

Например:

$("#offialNumberArea").show();
$("#eventNameArea").hide();

$('.selectCriteria').change(function(){
    var thisVal = $(this).val();
    if(thisVal == 'sailor'){
        $("#offialNumberArea").show();
        $("#eventNameArea").hide();
    }
    else
    {
        $("#offialNumberArea").hide();
        $("#eventNameArea").show();
        $("#MISSION_ID").select2();
    }
});

0

Более простое решение CSS, независимое от select2

//HTML
<select id="" class="input-xlg">
</select>
<input type="text" id="" name="" value="" class="input-lg" />

//CSS
.input-xxsm {
  width: 40px!important; //for 2 digits 
}

.input-xsm {
  width: 60px!important; //for 4 digits 
}

.input-sm {
  width: 100px!important; //for short options   
}

.input-md {
  width: 160px!important; //for medium long options 
}

.input-lg {
  width: 220px!important; //for long options    
}

.input-xlg {
  width: 300px!important; //for very long options   
}

.input-xxlg {
  width: 100%!important; //100% of parent   
}

0

В недавнем проекте, построенном с использованием Bootstrap 4 , я перепробовал все вышеперечисленные методы, но ничего не получалось. Мой подход заключался в редактировании библиотеки CSS с использованием jQuery, чтобы получить 100% на столе.

 // * Select2 4.0.7

$('.select2-multiple').select2({
    // theme: 'bootstrap4', //Doesn't work
    // width:'100%', //Doesn't work
    width: 'resolve'
});

//The Fix
$('.select2-w-100').parent().find('span')
    .removeClass('select2-container')
    .css("width", "100%")
    .css("flex-grow", "1")
    .css("box-sizing", "border-box")
    .css("display", "inline-block")
    .css("margin", "0")
    .css("position", "relative")
    .css("vertical-align", "middle")

Рабочая Демо

$('.select2-multiple').select2({
        // theme: 'bootstrap4', //Doesn't work
        // width:'100%',//Doens't work
        width: 'resolve'
    });
    //Fix the above style width:100%
    $('.select2-w-100').parent().find('span')
        .removeClass('select2-container')
        .css("width", "100%")
        .css("flex-grow", "1")
        .css("box-sizing", "border-box")
        .css("display", "inline-block")
        .css("margin", "0")
        .css("position", "relative")
        .css("vertical-align", "middle")
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet" />

<div class="table-responsive">
    <table class="table">
        <thead>
        <tr>
            <th scope="col" class="w-50">#</th>
            <th scope="col" class="w-50">Trade Zones</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>
                1
            </td>
            <td>
                <select class="form-control select2-multiple select2-w-100" name="sellingFees[]"
                        multiple="multiple">
                    <option value="1">One</option>
                    <option value="1">Two</option>
                    <option value="1">Three</option>
                    <option value="1">Okay</option>
                </select>
            </td>
        </tr>
        </tbody>
    </table>
</div>

<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.7/js/select2.min.js"></script>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.