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.

Undécimo
fuente
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
});
Smith azul
fuente
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'
}); 
xicooc
fuente
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>

Aaron Hudon
fuente
20

Eliminar las entradas con jQuery funciona para mí:

$(".select2-search, .select2-focusser").remove();
Arkaitz Garro
fuente
¡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; }

YWA
fuente
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 });
Saifur Rahman
fuente
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

MKK
fuente
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 });
Mike Campbell
fuente
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);
Juan manuel de castro
fuente
1
//readonly on all select2 input
$(".select2-search input").prop("readonly", true);
Juan manuel de castro
fuente
1

Si tiene múltiples atributos en su selección, este truco sucio funciona:

var multipleSelect = $('select[name="list_type"]');
multipleSelect.select2();
multipleSelect.parent().find('.select2-search--inline').remove();
multipleSelect.on('change', function(){
    multipleSelect.parent().find('.select2-search--inline').remove();
});

ver documentos aquí https://select2.org/searching#limiting-display-of-the-search-box-to-large-result-sets

ivanbogomolov
fuente
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();
  }
Andrés
fuente
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

Foram Thakral
fuente
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.

Shahbaz
fuente
0

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

capcom
fuente
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

Faisal Ghaffar
fuente
0

prueba este CSS

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

esta entrada es el campo de búsqueda

Vajiheh habibi
fuente