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.


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
});

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

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>


20

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

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

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; }


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 });

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


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 });

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

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


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.


0

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


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


0

tente este CSS

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

esta entrada é campo de pesquisa

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.