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.