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


151

У мене проблеми з тим, щоб цей plunkr (select2 + angulat-ui) працював.

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

При локальному налаштуванні я отримую роботу select2, але не можу встановити ширину, як описано в документах . Він занадто вузький, щоб використовувати його.

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

Дякую.

EDIT: Неважливо, plnkr, я знайшов тут робочу загадку http://jsfiddle.net/pEFy6/

Схоже, що поведінка select2 згортається до ширини першого елемента. Я міг би встановити ширину через завантажувальний class="input-medium".


Чи можете ви бути більш конкретними щодо того, що ви вже пробували? Обрана бібліотека (на якій заснований select2) генеруватиме ширину на основі ширини, наданої у HTML / CSS.
Адам Грант

Відповіді:


216

Потрібно вказати ширину атрибуту для вирішення, щоб зберегти ширину елемента

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

7
$ ("# myselect"). select2 ({placeholder: 'Select Country', width: '192px'}); вирішив мою проблему з IE і не впливає на FF та Chrome! Дякую!
Адріан П.

так. Я також запитав автора github.com/godbasin/vue-select2/isissue/11
shinriyo

232

У моєму випадку вибір2 відкриється правильно, якби було нульових або більше таблеток.

Але якби була одна чи кілька таблеток, і я їх все видалив, вона зменшиться до найменшої ширини. Моє рішення було просто:

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

7
найкраща відповідь, якщо ви використовуєте select2 версії 4.0.0
Стів

1
чому це краще, ніж $ ("# myselect"). select2 ({width: 'resolution'}); ? (здається, те саме)
Рікардо Вігатті

1
@RicardoVigatti: width: 'resolution' працює лише один раз при завантаженні сторінки, але не при зміні розміру. Якщо ви використовуєте чуйні дизайни, це не робитиме фокус
Fabian Schöner

1
resolveне працювало для мене - 100% `зробив '. це півгодини безнадійно шукати відповідь "вирішено". дякую :)
Darragh Enright

1
Це найкраща відповідь поки що. Але тепер для мене поле пошуку не заповнює всю ширину. Будь-який простий спосіб виправити це?
ТНТ

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"}
});

вона встановить ширину вашого вибору такою ж, як і ширина вашого діла.


1
Це зробило для мене хитрість (я не зміг отримати select2, щоб автоматично змінити розмір з Bootstrap 3). Хоча мушу сказати, що це трохи хакі.
мкатая

Це поставило мене на правильний шлях, я замінив дисплей на 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.