select2: ocultar el cuadro de búsqueda


206

Para mis selecciones más significativas, el cuadro de búsqueda en Select2 es maravilloso. Sin embargo, en un caso, tengo una selección simple de 4 opciones codificadas. En este caso, el cuadro de búsqueda es superfluo y parece un poco tonto estar presente. ¿Es posible ocultarlo de alguna manera? Eché un vistazo a la documentación en línea y no pude encontrar ninguna opción para esto en el constructor.

Podría, por supuesto, usar una selección html normal, pero por coherencia me gustaría usar Select2 si es posible.


Gracias por la idea. Aunque sabía sobre .show () y .hide () en jQuery, no se me ocurrió que el complemento continuaría funcionando si hiciera algo así fuera de sus propias opciones. Sin embargo, a primera vista, parece funcionar :)
EleventyOne

¿Puedes explicar qué hace el método hide y cómo funciona? ¿Me estás diciendo que solo oculta el cuadro de búsqueda porque ese no parece ser el caso
IcedDante

@IcedDante El hidemétodo se describe aquí: api.jquery.com/hide Siempre que lo aplique al selector apropiado, entonces, sí, debería ocultar solo el cuadro de búsqueda. Sin embargo, hay métodos específicos de complementos que pueden emplearse para ocultarlo, que recomendaría que use en su lugar (ver más abajo).
EleventyOne

Respuestas:


474

Vea este hilo https://github.com/ivaynberg/select2/issues/489 , puede ocultar el cuadro de búsqueda estableciendo un valor mínimo de valores mínimos de búsqueda en un valor negativo.

$('select').select2({
    minimumResultsForSearch: -1
});

14
El problema principal aquí, como se menciona en el ticket en github es en dispositivos móviles, todavía muestra el teclado. Hemos reemplazado select2 con elegido.
toutpt

2
y se traduce perfectamente a angular-ui ui-select2!
rhigdon

¡Opción muy práctica! Lo usé para mostrar la búsqueda de 10 y más opciones. No es necesario eliminar manualmente la entrada de búsqueda.
blazkovicz

@KevinBrown Infinityno es un valor negativo. Su edición hace que el texto y el código no coincidan. El problema vinculado a señala específicamente que un valor negativo es el enfoque compatible correcto. El problema vinculado a también afirma "Alto valor de minimalResultsForSearch solo oculta el cuadro de búsqueda en la selección abierta. Pero si escribimos alguna letra mientras select está cerrado y enfocado, la búsqueda aparecerá, no importa cuán alto sea" y aunque no puedo reproducir ese problema en particular en la versión actual, es probable que sea un problema real en versiones anteriores. Por esas razones, revertí tu edición.

1
Pero, deshabilita completamente la funcionalidad de búsqueda.
sudip


34
.no-search .select2-search {
    pantalla: ninguno
}

$ ("# prueba"). select2 ({
    dropdownCssClass: 'no-search'
}); 

1
+1 Me gusta porque evita que el cuadro de búsqueda aparezca brevemente en la interfaz de usuario mientras se realiza una solicitud AJAX. Esto también es cierto para el hack -1.
SimonGates

Esta es definitivamente la mejor respuesta para la pregunta porque realmente evita eventos ui como "buscar ...".
Sarin Suriyakoon

55
Funcionó perfectamente, gracias! Solo una nota para cualquier futuro Googler, esto requiere la versión completa select2 (select2.full. *), Como se indica aquí: github.com/select2/select2/issues/2879#issuecomment-149940634
Othyn

1
Gracias, es lo que estaba buscando, ya que incluso con el cuadro de búsqueda oculto, permite mantener la funcionalidad de búsqueda disponible cuando desea llamarlo mediante programación: $ ("# myselect"). Select2 ("buscar", "search_value")
nicolas

De hecho, esta es la mejor opción. Como @Othyn dice que se necesita la versión completa select2.full.min.js como se documenta en el sitio web: select2.github.io
robbpriestley

26

Version 4.0.3

Intente no mezclar los requisitos de la interfaz de usuario con su código JavaScript.

Puede ocultar el cuadro de búsqueda en el marcado con el atributo:

data-minimum-results-for-search="Infinity"

Margen

<select class="select2" data-minimum-results-for-search="Infinity"></select>

Ejemplo

$(document).ready(function() {
  $(".select2").select2();
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>

<label>without search box</label>
<select class="select2" data-width="100%" data-minimum-results-for-search="Infinity">
  <option>one</option>
  <option>two</option>
</select>

<label>with search box</label>
<select class="select2" data-width="100%">
  <option>one</option>
  <option>two</option>
</select>


20

Eliminar las entradas con jQuery funciona para mí:

$(".select2-search, .select2-focusser").remove();

¡Perfecto, en el móvil no se muestra el teclado!
Pieter Meiresone

Esto funciona para todos los menús desplegables de la página, pero no puedo apuntar solo a menús desplegables específicos. No se puede apuntar porque no son hijos de la identificación select2.
Shaun Lebron

2
agregue un contenedor para especificar
YAMM

3

Esta es la mejor solución, limpia y funciona bien:

$("#select2Id").select2 () ;
$("#select2Id").select2 ('container').find ('.select2-search').addClass ('hidden') ;

Luego, crea una clase .hidden { display;none; }


Esto podría haber funcionado bien en el pasado, pero no funciona en la última versión de select2.
Matt Browne

3

Si desea ocultar la búsqueda de un menú desplegable específico, use el atributo id para eso.

$('#select_id').select2({ minimumResultsForSearch: -1 });

1

Si la selección es mostrar resultados, uno tiene que usar esto:

$('#yourSelect2ControlId').select2("close").parent().hide();

cierra el cuadro de resultados de búsqueda y luego establece el control invisible


1

Me gusta hacer esto dinámicamente dependiendo del número de opciones en la selección; para ocultar la búsqueda de selecciones con 10 o menos resultados, hago:

$fewResults = $("select>option:nth-child(11)").closest("select");
$fewResults.select2();
$('select').not($fewResults).select2({ minimumResultsForSearch : -1 });

1
//Disable a search on particular selector
$(".my_selector").select2({
    placeholder: "ÁREAS(todas)",
    tags: true,
    width:'100%',
    containerCssClass: "area_disable_search_input" // I add new class 
});

//readonly prop to selector class
$(".area_disable_search_input input").prop("readonly", true);



1

Si desea ocultarse en la apertura inicial y está completando el menú desplegable a través de una llamada ajax, agregue lo siguiente al bloque ajax en su declaración select2:

beforeSend: function () 
  {
    $('.select2-search--dropdown').addClass('hidden');
  }

Para mostrarlo nuevamente (y enfocarse) después de que su solicitud ajax sea exitosa:

  success: function() {
      $('.select2-search--dropdown').removeClass('select2-search--hide'); // show search bar then focus
      $('.select2-search__field')[0].focus();
  }

1

Puedes probar esto

$('#select_id').select2({ minimumResultsForSearch: -1 });

cierra el cuadro de resultados de búsqueda y luego establece el control invisible

Puede consultar aquí en el documento select2 documentos select2


0

La respuesta de @Misha Kobrin funciona bien para mí, así que he decidido explicarlo más

Si quieres ocultar el cuadro de búsqueda, puedes hacerlo con jQuery.

por ejemplo, ha inicializado el complemento select2 en un menú desplegable que tiene audiencia de identificación

element_select = '#audience';// id or class
$(element_select).select2("close").parent().hide();

El ejemplo funciona en todos los dispositivos en los que funciona select2.


0

Edité el select2.min.jsarchivo para establecer el select-2__searchcampo de entrada que se genera readonly="true".


0

Para la selección múltiple, debe escribir el código js, ​​no hay propiedades de configuración.

$('#js-example-basic-hide-search-multi').select2();

$('#js-example-basic-hide-search-multi').on('select2:opening select2:closing', function( event ) {
    var $searchfield = $(this).parent().find('.select2-search__field');
    $searchfield.prop('disabled', true);
});

Esto se menciona en su página: https://select2.org/searching#multi-select


0

prueba este CSS

input[aria-controls=select2-product-type-results]{
  display: none;
}

esta entrada es el campo de búsqueda

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.