establecer el ancho de entrada select2 (a través de la directiva Angular-ui)


151

Tengo problemas para hacer que este plunkr (select2 + angulat-ui) funcione.

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

En la configuración local, obtengo el trabajo select2, pero no puedo establecer el ancho como se describe en los documentos . Es demasiado angosto para ser usado.

ingrese la descripción de la imagen aquí

Gracias.

EDITAR: No importa que por favor, encontré un violín que funciona aquí http://jsfiddle.net/pEFy6/

Parece que es el comportamiento de select2 colapsar al ancho del primer elemento. Podría establecer el ancho a través de bootstrap. class="input-medium"Todavía no estoy seguro de por qué angular-ui no toma parámetros de configuración.


¿Puedes ser más específico en cuanto a lo que ya has probado? La biblioteca elegida (en la que se basa select2) generará un ancho basado en el ancho proporcionado en HTML / CSS.
Adam Grant

Respuestas:


216

Debe especificar el ancho del atributo a resolver para preservar el ancho del elemento

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

77
$ ("# myselect"). select2 ({marcador de posición: 'Seleccionar país', ancho: '192px'}); ¡resolvió mi problema con IE y no tiene efecto en FF y Chrome! ¡Gracias!
Adrian P.

si. También le pregunté al autor github.com/godbasin/vue-select2/issues/11
shinriyo

232

En mi caso, select2 se abriría correctamente si hubiera cero o más píldoras.

Pero si hubiera una o más píldoras, y las eliminara todas, se reduciría al ancho más pequeño. Mi solución fue simplemente:

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

77
mejor respuesta si usa select2 versión 4.0.0
Steve

1
por qué esto es mejor que $ ("# myselect"). select2 ({width: 'resolve'}); ? (parece ser lo mismo)
Ricardo Vigatti

1
@RicardoVigatti: ancho: 'resolver' solo funciona una vez al cargar la página pero no al cambiar el tamaño. Si está utilizando diseños receptivos, no funciona
Fabian Schöner

1
resolveno funcionó para mí, 100% `sí. eso es media hora buscando desesperadamente una respuesta "resuelta". gracias :)
Darragh Enright

1
Esta es la mejor respuesta hasta ahora. Pero ahora, para mí, el campo de búsqueda no ocupa todo el ancho. ¿Alguna forma fácil de corregir esto?
TNT

48

Esta es una vieja pregunta, pero aún vale la pena publicar nueva información ...

Comenzando con Select2 versión 3.4.0 hay un atributo dropdownAutoWidthque resuelve el problema y maneja todos los casos impares. Tenga en cuenta que no está activado de forma predeterminada. Se redimensiona dinámicamente a medida que el usuario realiza selecciones, agrega ancho allowClearsi se usa ese atributo y también maneja el texto de marcador de posición correctamente.

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

Funciona bastante bien ... excepto si está utilizando marcadores de posición, si lo está, si sus opciones son más pequeñas que el marcador de posición, el texto del marcador de posición se truncará :(
MrPowerGamerBR

24

select2 V4.0.3

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

11

Con> 4.0 de select2 estoy usando

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

Estos otros no funcionaron:

  • dropdownCssClass: 'bigdrop'
  • ancho: '100%'
  • ancho: 'resolver'

9

agregue el método css contenedor en su script de esta manera:

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

establecerá el ancho de su selección igual que el ancho de su div.


1
Esto me sirvió (no pude hacer que select2 cambiara el tamaño automáticamente con Bootstrap 3). Aunque tengo que decir que es un poco hacky.
mkataja

Esto me puso en el camino correcto, reemplacé la pantalla con minWidth:$( '.opt-option-type-select' ).select2( { containerCss : { minWidth: '10em', }, } );
Nabil Kadimi

2

Establecer ancho para 'resolver' no funcionó para mí. En cambio, agregué "ancho: 100%" a mi selección y modifiqué el CSS de esta manera:

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

Esta fue la única solución que funcionó para mí (mi versión es 2.2.1) Su selección ocupará todo el lugar disponible, es mejor que usar

class="input-medium"

desde bootstrap, porque el select siempre permanece en el contenedor, incluso después de cambiar el tamaño de la ventana (sensible)


Gracias por la solución, pero solo funcionó para mí en la primera carga. Una vez que seleccioné una etiqueta y luego hice clic en otro elemento de la página, la entrada select2 volvió al tamaño incorrecto
Marklar

1

Agregue la opción de resolución de ancho a su función select2

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

Después de agregar CSS debajo de su hoja de estilo

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

Solucionará el problema


0

Puedes intentarlo así. Esto funciona para mi

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

En la solicitud de ocultar / mostrar o ajax, tenemos que reinicializar el complemento select2

Por ejemplo:

$("#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

Solución CSS más fácil independiente de 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

En un proyecto reciente creado con Bootstrap 4 , probé todos los métodos anteriores pero nada funcionó. Mi enfoque fue editar la biblioteca CSS usando jQuery para obtener el 100% en la tabla.

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

Demo de trabajo

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.