defina a largura da entrada select2 (através da diretiva Angular-ui)

151

Estou com problemas para fazer este plunkr (select2 + angulat-ui) funcionar.

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

Na configuração local, recebo o trabalho select2, mas não posso definir a largura conforme descrito nos documentos . É muito estreito para ser usado.

insira a descrição da imagem aqui

Obrigado.

EDIT: Não importa que plnkr, eu encontrei um violino trabalhando aqui http://jsfiddle.net/pEFy6/

Parece que o comportamento do select2 é reduzido à largura do primeiro elemento. Eu poderia definir a largura através do bootstrap. class="input-medium"Ainda não sei por que o angular-ui não aceita parâmetros de configuração.

bsr
fonte
Você pode ser mais específico quanto ao que você já tentou? A biblioteca escolhida (na qual o select2 é baseado) gerará uma largura com base na largura fornecida no HTML / CSS.
Adam Grant

Respostas:

216

Você precisa especificar a largura do atributo a ser resolvida para preservar a largura do elemento

$(document).ready(function() { 
    $("#myselect").select2({ width: 'resolve' });           
});
Diego Alvarez
fonte
7
$ ("# myselect"). select2 ({marcador de posição: 'Selecionar país', largura: '192px'}); resolveu meu problema com o IE e não tem efeito no FF e no Chrome! Obrigado!
Adrian P.
sim. Também perguntei ao autor github.com/godbasin/vue-select2/issues/11
shinriyo
232

No meu caso, o select2 abriria corretamente se houvesse zero ou mais comprimidos.

Mas se houvesse uma ou mais pílulas e eu as excluísse, ela diminuiria para a menor largura. Minha solução foi simplesmente:

$("#myselect").select2({ width: '100%' });      
portforwardpodcast
fonte
7
melhor resposta se usando select2 versão 4.0.0
Steve
1
por que isso é melhor que $ ("# myselect"). select2 ({width: 'resolve'}); ? (parece ser o mesmo)
Ricardo Vigatti
1
@RicardoVigatti: width: 'resolve' funciona apenas uma vez no carregamento da página, mas não no redimensionamento. Se your'e usando desenhos responsivos ele não fazer o truque
Fabian Schöner
1
resolvenão funcionou para mim - 100% `funcionou. é meia hora procurando desesperadamente por uma resposta "resolvida". Obrigado :)
Darragh Enright
1
Esta é a melhor resposta até agora. Mas agora, para mim, o campo de pesquisa não preenche toda a largura. Alguma maneira fácil de corrigir isso?
TNT
48

Esta é uma pergunta antiga, mas ainda vale a pena postar novas informações ...

A partir da versão 3.4.0 do Select2, existe um atributo dropdownAutoWidthque resolve o problema e lida com todos os casos ímpares. Observe que não está ativado por padrão. Ele é redimensionado dinamicamente à medida que o usuário faz seleções, adiciona largura para allowClearse esse atributo for usado e também manipula o texto do espaço reservado corretamente.

$("#some_select_id").select2({
    dropdownAutoWidth : true
});
Shep
fonte
Funciona muito bem ... exceto se você estiver usando espaços reservados, se estiver, se suas opções forem menores que o espaço reservado, o texto do espaço reservado será truncado :(
MrPowerGamerBR 4/19
24

select2 V4.0.3

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

Com> 4.0 de select2 eu estou usando

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

Esses outros não funcionaram:

  • dropdownCssClass: 'bigdrop'
  • largura: '100%'
  • width: 'resolve'
sobelito
fonte
9

adicione o método container css em seu script como este:

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

ele definirá a largura da sua seleção igual à largura da sua div.

atuk
fonte
1
Isso fez o truque para mim (não consegui que o select2 fosse redimensionado automaticamente com o Bootstrap 3). Embora eu tenha que dizer que é um pouco hacky.
mkataja
Isso me colocou no caminho certo, substitui a exibição por minWidth:$( '.opt-option-type-select' ).select2( { containerCss : { minWidth: '10em', }, } );
Nabil Kadimi
2

Definir largura para 'resolver' não funcionou para mim. Em vez disso, adicionei "width: 100%" ao meu select e modifiquei o css assim:

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

Esta foi a única solução que funcionou para mim (minha versão é 2.2.1). Seu select ocupará todo o lugar disponível, é melhor do que usar

class="input-medium"

do bootstrap, porque o select fica sempre no contêiner, mesmo depois de redimensionar a janela (responsivo)

helene
fonte
Obrigado pela solução, mas só funcionou para mim na primeira carga. Uma vez eu ter escolhido um tag e, em seguida, clicar em outro elemento de página a entrada select2 voltou para o tamanho incorreto
Marklar
1

Adicione a opção de resolução de largura à sua função select2

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

Depois de adicionar CSS abaixo à sua folha de estilo

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

Isso resolverá o problema

Ravindu Lokumanna
fonte
0

Você pode tentar assim. Funciona para mim

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

Na solicitação hide / show ou ajax, precisamos reinicializar o plug-in select2

Por exemplo:

$("#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();
    }
});
Bablu Ahmed
fonte
0

Solução CSS mais fácil, independente da 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   
}
Adrian P.
fonte
0

Em um projeto recente criado com o Bootstrap 4 , tentei todos os métodos acima, mas nada funcionou. Minha abordagem foi editando a biblioteca CSS usando o jQuery para obter 100% da tabela.

 // * 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")

Demonstração de trabalho

$('.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>

Abdelsalam Shahlol
fonte