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.


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

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%' });      

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

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>

11

Com> 4.0 de select2 eu estou usando

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

Esses outros não funcionaram:

  • dropdownCssClass: 'bigdrop'
  • largura: '100%'
  • width: 'resolve'

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.


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)


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


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

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   
}

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>

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.