установить ширину ввода 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 не принимает параметры конфигурации.

BSR
источник
Можете ли вы быть более точным в том, что вы уже пробовали? Выбранная библиотека (на которой основан 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%' });      
portforwardpodcast
источник
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>
Sadee
источник
11

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

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

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

  • dropdownCssClass: 'bigdrop'
  • ширина: «100%»
  • ширина: «разрешить»
sobelito
источник
9

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

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

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

atuk
источник
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"

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

Helene
источник
Спасибо за решение, но оно сработало только при первой загрузке. Как только я выбрал тег, а затем нажал на другой элемент страницы, вход 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>

Абдельсалам Шахлол
источник