select2: nasconde la casella di ricerca


206

Per le mie selezioni più significative, la casella di ricerca in Select2 è meravigliosa. Tuttavia, in un caso, ho una semplice selezione di 4 scelte codificate. In questo caso, la casella di ricerca è superflua e sembra essere un po 'sciocca. È possibile nasconderlo in qualche modo? Ho dato un'occhiata alla documentazione online e non ho trovato alcuna opzione per questo nel costruttore.

Ovviamente, potrei semplicemente usare una normale selezione HTML, ma per coerenza vorrei usare Select2 se possibile.


Grazie per l'idea. Sebbene sapessi di .show () e .hide () in jQuery, non mi venne in mente che il plug-in avrebbe continuato a funzionare se avessi fatto qualcosa di simile al di fuori delle sue opzioni. Tuttavia, a prima vista, sembra funzionare :)
EleventyOne,

Puoi spiegare cosa fa il metodo hide e come funziona? Mi stai dicendo che nasconde solo la casella di ricerca perché non sembra essere affatto così
IcedDante

@IcedDante Il hidemetodo è descritto qui: api.jquery.com/hide Fintanto che lo si applica solo al selettore appropriato, sì, dovrebbe nascondere la casella di ricerca da solo. Tuttavia, ci sono metodi specifici del plug-in che possono essere utilizzati per nasconderlo, che ti consiglio di utilizzare invece (vedi sotto).
EleventyOne,

Risposte:


474

Vedi questa discussione https://github.com/ivaynberg/select2/issues/489 , puoi nascondere la casella di ricerca impostando minimumResultsForSearch su un valore negativo.

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

14
Il problema principale qui menzionato nel ticket su github è sul cellulare e mostra ancora la tastiera. Abbiamo sostituito select2 con scelto.
toutpt

2
e si traduce perfettamente in angular-ui ui-select2!
rhigdon,

Opzione molto utile! L'ho usato per mostrare la ricerca di 10 e più opzioni. Non è necessario rimuovere manualmente l'input di ricerca.
blazkovicz,

@KevinBrown Infinitynon è un valore negativo. La modifica rende il testo e il codice non corrispondenti. Il problema collegato sottolinea specificamente che un valore negativo è l'approccio supportato corretto. Il problema collegato a rivendica anche "Alto valore di minimumResultsForSearch nasconde solo la casella di ricerca nella selezione aperta. Ma se si digita una lettera mentre la selezione è chiusa e focalizzata - la ricerca si aprirà, non importa quanto sia alta" e anche se non riesco a riprodurre quel particolare problema nella versione corrente, è probabile che sia un vero problema nelle versioni precedenti. Per questi motivi, ho ripristinato la tua modifica.

1
Ma disabilita completamente la funzionalità di ricerca.
sudip,


34
.no-search .select2-search {
    display: none
}

$ ( "# Test"). Select2 ({
    dropdownCssClass: 'no-search'
}); 

1
+1 Mi piace perché impedisce alla casella di ricerca di apparire brevemente nell'interfaccia utente mentre viene effettuata una richiesta AJAX. questo vale anche per l'hack -1.
SimonGates,

Questa è sicuramente la migliore risposta alla domanda perché impedisce davvero di usare eventi come "ricerca ....".
Sarin Suriyakoon,

5
Ha funzionato perfettamente, grazie! Solo una nota per qualsiasi Googler futuro, questo richiede la versione completa select2 (select2.full. *), Come indicato qui: github.com/select2/select2/issues/2879#issuecomment-149940634
Othyn,

1
Grazie, è quello che stavo cercando poiché, anche con la casella di ricerca nascosta, consente di mantenere la funzionalità di ricerca disponibile quando si desidera chiamarla programmaticamente: $ ("# myselect"). Select2 ("search", "search_value")
nicolas

In effetti questa è l'opzione migliore. Come dice @Othyn, è necessaria la versione completa select2.full.min.js come documentato sul sito Web: select2.github.io
robbpriestley,

26

Versione 4.0.3

Cerca di non mescolare i requisiti dell'interfaccia utente con il tuo codice JavaScript.

Puoi nascondere la casella di ricerca nel markup con l'attributo:

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

markup

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

Esempio

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

Rimuovere gli input con jQuery funziona per me:

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

Perfetto, sul cellulare la tastiera non viene visualizzata!
Pieter Meiresone,

Funziona con tutti i menu a discesa sulla pagina, ma non posso scegliere come target solo menu a discesa specifici. Non possono essere scelti come target poiché non sono figli dell'ID select2.
Shaun Lebron,

2
aggiungere un wrapper per specificare
YAMM

3

Questa è la soluzione migliore, pulita e funzionante:

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

Quindi, crea una classe .hidden { display;none; }


Potrebbe aver funzionato bene in passato, ma non funziona sull'ultima versione di select2.
Matt Browne,

3

Se desideri nascondere la ricerca di un menu a discesa specifico, utilizza l'attributo id.

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

1

Se la selezione mostra i risultati, è necessario utilizzare questo:

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

chiude la casella dei risultati della ricerca e quindi imposta il controllo non visibile


1

Mi piace farlo in modo dinamico a seconda del numero di opzioni nella selezione; per nascondere la ricerca di selezioni con 10 o meno risultati, faccio:

$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

Se si desidera nascondere all'apertura iniziale e si sta popolando il menu a discesa tramite chiamata ajax, aggiungere quanto segue al blocco ajax nella dichiarazione select2:

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

Per poi mostrarlo di nuovo (e focalizzare) dopo che la tua richiesta Ajax ha esito positivo:

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


0

La risposta di @Misha Kobryn funziona bene per me Quindi ho deciso di spiegarlo di più

Vuoi nascondere la casella di ricerca, puoi farlo da jQuery.

ad esempio hai inizializzato il plugin select2 in un menu a discesa con pubblico id

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

L'esempio funziona su tutti i dispositivi su cui funziona select2.


0

Ho modificato il select2.min.jsfile per impostare il select-2__searchcampo di input a cui è stato generato readonly="true".


0

Per la selezione multipla devi scrivere il codice js, non ci sono proprietà settings.

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

Questo è menzionato nella loro pagina: https://select2.org/searching#multi-select


0

prova questo CSS

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

questo input è il campo di ricerca

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.