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({placeholder: 'Select Country'、width: '192px'}); IEで私の問題を解決しましたが、FFとChromeには影響しません!ありがとう!
Adrian P.


232

私の場合、錠剤がゼロ以上ある場合、select2は正しく開きます。

しかし、丸薬が1つ以上あり、それらをすべて削除した場合、最小の幅に縮小されます。私の解決策は単純でした:

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

7
select2バージョン4.0.0を使用する場合の最良の回答
Steve

1
これが$( "#myselect")。select2({width: 'resolve'});よりも優れている理由 ?(同じようです)
リカルドヴィガッティ

1
@RicardoVigatti:width: 'resolve'は、ページのロード時に一度だけ機能し、サイズ変更では機能しません。your'eが応答デザインを使用した場合、それはトリックを行うdoes notの
ファビアンSchöner

1
resolveうまくいきませんでした-100% `はうまくいきました それは「解決済み」の答えを絶望的に探している30分です。おかげで:)
Darragh Enright 2016

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

私が使用しているselect2の> 4.0で

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

これらの他のものは機能しませんでした:

  • dropdownCssClass: 'bigdrop'
  • 幅: '100%'
  • 幅: '解決'

9

次のように、スクリプトにメソッドコンテナcssを追加します。

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

選択の幅をdivの幅と同じに設定します。


1
これでうまくいきました(select2がBootstrap 3で自動的にサイズを変更することができませんでした)。私はそれが少しハッキーだと言わざるを得ませんが。
mkataja 14年

これで正しい軌道に乗ったので、ディスプレイをminWidthに置き換えました:$( '.opt-option-type-select' ).select2( { containerCss : { minWidth: '10em', }, } );
Nabil Kadimi

2

幅を 'resolve'に設定してもうまくいきませんでした。代わりに、「幅:100%」を選択に追加し、CSSを次のように変更しました。

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

これは私のために働いた唯一の解決策でした(私のバージョンは2.2.1です)あなたの選択は利用可能なすべての場所を取ります、それは使用するよりも優れています

class="input-medium"

ブートストラップから。ウィンドウのサイズを変更した後でも(selectiveは)常にコンテナ内に留まるため


解決策をありがとうございますが、最初のロードでのみ機能しました。タグを選択してから別のページ要素をクリックすると、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

select2から独立した、より簡単なCSSソリューション

//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を使用してビルドされた最近のプロジェクトでは、上記の方法をすべて試しましたが、何も機能しませんでした。私のアプローチは、jQueryを使用してライブラリ CSSを編集し、テーブルを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>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.