установить ширину ввода 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.