select2 - ocultando a caixa de pesquisa

206

Para minhas seleções mais significativas, a caixa de pesquisa no Select2 é maravilhosa. No entanto, em um exemplo, tenho uma seleção simples de 4 opções codificadas. Nesse caso, a caixa de pesquisa é supérflua e parece um pouco boba por estar presente. É possível escondê-lo de alguma forma? Dei uma olhada na documentação on-line e não consegui encontrar nenhuma opção para isso no construtor.

É claro que eu poderia usar apenas um html select regular, mas por consistência eu gostaria de usar o Select2, se possível.

EleventyOne
fonte
Obrigado pela idéia. Embora eu soubesse sobre .show () e .hide () no jQuery, não me ocorreu que o plug-in continuaria funcionando se eu fizesse algo assim fora de suas próprias opções. No entanto, à primeira vista, parece funcionar :)
EleventyOne
Você pode explicar o que o método hide faz e como funciona? Você está me dizendo que só esconde a caixa de pesquisa, porque isso não parece ser o caso em tudo
IcedDante
@IcedDante O hidemétodo é descrito aqui: api.jquery.com/hide Desde que você o aplique apenas ao seletor apropriado, sim, ele deve ocultar a caixa de pesquisa sozinha. No entanto, existem métodos específicos de plugins que podem ser empregados para ocultá-lo, que eu recomendaria que você usasse (veja abaixo).
EleventyOne

Respostas:

474

Consulte este tópico https://github.com/ivaynberg/select2/issues/489 . Você pode ocultar a caixa de pesquisa definindo minimumResultsForSearch com um valor negativo.

$('select').select2({
    minimumResultsForSearch: -1
});
Blue Smith
fonte
14
A questão principal aqui, conforme mencionado no ticket no github, é no celular, ele ainda exibe o teclado. Substituímos select2 pelo escolhido.
toutpt
2
e traduz perfeitamente para angular-ui ui-select2!
rhigdon
Opção muito útil! Usei-o para mostrar a pesquisa por 10 e mais opções. Não há necessidade de remover manualmente a entrada de pesquisa.
blazkovicz 12/08
@KevinBrown Infinitynão é um valor negativo. Sua edição faz com que o texto e o código não correspondam. A questão vinculada a indica especificamente que um valor negativo é a abordagem suportada correta. O problema vinculado a também afirma "O alto valor de minimumResultsForSearch oculta apenas a caixa de pesquisa na seleção aberta. Mas, se digitarmos uma letra enquanto a seleção estiver fechada e focada - a pesquisa será exibida, não importa quão alta seja" e, embora eu não possa reproduzir esse problema específico na versão atual, é provável que seja um problema real nas versões mais antigas. Por esses motivos, revirei sua edição.
1
Mas, desabilita completamente a funcionalidade de pesquisa.
sudip 14/02/19
34
.no-search .select2-search {
    Mostrar nenhum
}

$ ("# test"). select2 ({
    dropdownCssClass: 'sem pesquisa'
}); 
xicooc
fonte
1
+1 Gosto disso, pois impede que a caixa de pesquisa apareça brevemente na interface do usuário enquanto uma solicitação AJAX é feita. isso também é válido para o -1 hack.
SimonGates
Esta é definitivamente a melhor resposta para a pergunta, pois realmente evita a interface do usuário do evento, como "pesquisar ....".
Sarin Suriyakoon
5
Funcionou perfeitamente, obrigado! Apenas uma observação para qualquer Googler futuro, isso requer a versão completa select2 (select2.full. *), Conforme
Othyn
1
Obrigado, é o que eu estava procurando, pois mesmo com a caixa de pesquisa oculta, ela permite manter a funcionalidade de pesquisa disponível quando você deseja chamá-la programaticamente: $ ("# myselect"). Select2 ("search", "search_value")
nicolas
Na verdade, esta é a melhor opção. Como @Othyn diz a versão completa é necessária select2.full.min.js como documentado no site: select2.github.io
robbpriestley
26

Versão 4.0.3

Tente não misturar os requisitos da interface do usuário com o seu código JavaScript.

Você pode ocultar a caixa de pesquisa na marcação com o atributo:

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

Marcação

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

Exemplo

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

A remoção das entradas com o jQuery funciona para mim:

$(".select2-search, .select2-focusser").remove();
Arkaitz Garro
fonte
Perfeito, no celular o teclado não é exibido!
Pieter Meiresone 21/09
Isso funciona para todos os menus suspensos da página, mas não posso segmentar apenas menus suspensos específicos. Não pode ser segmentado, pois eles não são filhos do código select2.
Shaun Lebron
2
adicione um invólucro para especificar
YAMM 5/15
3

Esta é a melhor solução, limpa e funciona bem:

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

Em seguida, crie uma classe .hidden { display;none; }

YWA
fonte
Isso pode ter funcionado bem no passado, mas não funciona na versão mais recente do select2.
23815 Matt Browne
3

Se você deseja ocultar a pesquisa por um menu suspenso específico, use o atributo id para isso.

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

Se a seleção for mostrar resultados, é necessário usar isso:

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

fecha a caixa de resultados da pesquisa e define o controle invisível

MKK
fonte
1

Eu gosto de fazer isso dinamicamente, dependendo do número de opções no select; para ocultar a pesquisa de seleções com 10 ou menos resultados, eu faço:

$fewResults = $("select>option:nth-child(11)").closest("select");
$fewResults.select2();
$('select').not($fewResults).select2({ minimumResultsForSearch : -1 });
Mike Campbell
fonte
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
fonte
1
//readonly on all select2 input
$(".select2-search input").prop("readonly", true);
Juan Manuel De Castro
fonte
1

Se você possui vários atributos no seu select, esse hack sujo 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();
});

consulte os documentos aqui https://select2.org/searching#limiting-display-of-the-search-box-to-large-result-sets

ivanbogomolov
fonte
1

Se você deseja ocultar na abertura inicial e preencher o menu suspenso via chamada ajax, adicione o seguinte ao bloco ajax na sua declaração select2:

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

Para mostrá-lo novamente (e focar) depois que sua solicitação ajax for bem-sucedida:

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

Você pode tentar isso

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

fecha a caixa de resultados da pesquisa e define o controle invisível

Você pode conferir aqui no documento select2 select2 document

Foram Thakral
fonte
0

A resposta de @Misha Kobrin funciona bem para mim. Então, decidi explicar mais

Você deseja ocultar a caixa de pesquisa e pode fazê-lo com o jQuery.

por exemplo, você inicializou o plug-in select2 em uma lista suspensa com um público-alvo id

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

O exemplo funciona em todos os dispositivos nos quais o select2 funciona.

Shahbaz
fonte
0

Editei o select2.min.jsarquivo para definir o select-2__searchcampo de entrada que é gerado readonly="true".

Capcom
fonte
0

Para a seleção múltipla, é necessário escrever o código js, ​​não há propriedade de configurações.

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

Isso foi mencionado em sua página: https://select2.org/searching#multi-select

Faisal Ghaffar
fonte
0

tente este CSS

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

esta entrada é campo de pesquisa

Vajiheh habibi
fonte