select2 - скрытие окна поиска

Для моих более значительных выборов поле поиска в Select2 просто замечательно. Однако в одном случае у меня есть простой выбор из 4 жестко запрограммированных вариантов. В этом случае поле поиска излишне и выглядит немного глупо, если оно присутствует. Можно ли как-то скрыть это? Я просмотрел документацию в Интернете и не нашел для этого никаких вариантов в конструкторе.

Конечно, я мог бы просто использовать обычный HTML-выбор, но для единообразия я бы хотел по возможности использовать Select2.


person EleventyOne    schedule 05.07.2013    source источник
comment
Спасибо за идею. Хотя я знал о .show () и .hide () в jQuery, мне не приходило в голову, что плагин продолжит работать, если я сделаю что-то подобное вне его собственных возможностей. Тем не менее, на первый взгляд, вроде работает :)   -  person EleventyOne    schedule 05.07.2013
comment
Вы можете объяснить, что делает метод hide и как он работает? Вы говорите мне, что он скрывает только окно поиска, потому что, похоже, это совсем не так   -  person IcedDante    schedule 13.11.2014
comment
@IcedDante Метод hide описан здесь: api.jquery.com/hide Если только вы примените его к соответствующему селектору, тогда да, он должен скрыть только поле поиска. Тем не менее, есть методы, специфичные для плагинов, которые можно использовать, чтобы скрыть это, и я бы рекомендовал вам использовать их вместо них (см. Ниже).   -  person EleventyOne    schedule 22.03.2015


Ответы (16)


Смотрите эту ветку https://github.com/ivaynberg/select2/issues/489, вы можете скрыть поиск box, установив для minimumResultsForSearch отрицательное значение.

$('select').select2({
    minimumResultsForSearch: -1
});
person Blue Smith    schedule 15.07.2013
comment
Основная проблема, упомянутая в билете на github, заключается в том, что на мобильных устройствах все еще отображается клавиатура. Мы заменили select2 на selected. - person toutpt; 24.10.2013
comment
и он отлично переводится на angular-ui ui-select2! - person rhigdon; 25.10.2013
comment
Очень удобный вариант! Я использовал его, чтобы показать поиск 10 и более вариантов. Нет необходимости вручную удалять поисковый запрос. - person blazkovicz; 12.08.2014
comment
@KevinBrown Infinity не является отрицательным значением. В результате вашего редактирования текст и код не совпадают. Проблема, связанная с, конкретно указывает на то, что отрицательное значение является правильным поддерживаемым подходом. Связанная проблема также утверждает, что высокое значение minimumResultsForSearch скрывает окно поиска только в открытом выборе. Но если мы введем какую-то букву, когда select закрыт и сфокусирован - появится всплывающий поиск, независимо от того, насколько он высок, и хотя я не могу воспроизвести эту конкретную проблему в текущей версии, это, вероятно, будет настоящей проблемой в более старых версиях. По этим причинам я отменил вашу правку. - person ; 05.10.2015
comment
При использовании вызова ajax для первоначального заполнения раскрывающегося списка это скрывает поле поиска после отображения результатов. До этого момента отображается поле, пока отображается «поиск» и загружаются данные. - person Andrew; 08.08.2017
comment
Но при этом полностью отключается функция поиска. - person sudip; 14.02.2019
comment
Это не работает на select2 V4. Для V4 используйте minimumResultsForSearch: Infinity. - person ilibilibom; 19.02.2019
comment
Это очень полезно, когда вы сталкиваетесь с панелью поиска, появляющейся при загрузке страницы. - person Mark Salvania; 04.06.2019

Это на их странице примеров: https://select2.org/searching#hiding-the-search-box

$(".js-example-basic-hide-search").select2({
  minimumResultsForSearch: Infinity
});
person Sabin    schedule 08.04.2016
comment
Я думаю, -1 лучше, чем Infinity - person Seth B; 18.02.2021

Версия 4.0.3

Старайтесь не смешивать требования пользовательского интерфейса с кодом JavaScript.

Вы можете скрыть поле поиска в разметке с помощью атрибута:

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

Разметка

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

Пример

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

person Aaron Hudon    schedule 17.11.2016

Удаление входов с помощью jQuery работает для меня:

$(".select2-search, .select2-focusser").remove();
person Arkaitz Garro    schedule 23.10.2013
comment
Отлично, на мобиле клавиатура не отображается! - person Pieter Meiresone; 21.09.2014
comment
Это работает для всех раскрывающихся списков на странице, но я не могу настроить таргетинг только на определенные раскрывающиеся списки. Невозможно настроить таргетинг, поскольку они не являются дочерними элементами идентификатора select2. - person Shaun Lebron; 02.01.2015
comment
добавить оболочку, чтобы указать - person YAMM; 05.09.2015

Это лучшее решение, чистое и хорошо работающее:

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

Затем создайте класс .hidden { display;none; }

person YWA    schedule 19.10.2014
comment
Это могло хорошо работать в прошлом, но не работает в последней версии select2. - person Matt Browne; 23.07.2015

Если вы хотите скрыть поиск определенного раскрывающегося списка, используйте для этого атрибут id.

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

Если выбран вариант «Показать результаты», нужно использовать это:

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

он закрывает окно результатов поиска, а затем устанавливает невидимый контроль

person MKK    schedule 02.10.2014

Мне нравится делать это динамически в зависимости от количества опций в выборе; чтобы скрыть поиск выборок с 10 или менее результатами, я делаю:

$fewResults = $("select>option:nth-child(11)").closest("select");
$fewResults.select2();
$('select').not($fewResults).select2({ minimumResultsForSearch : -1 });
person Mike Campbell    schedule 16.12.2015

Если у вас есть несколько атрибутов в вашем выборе, этот грязный прием работает:

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

см. документы здесь https://select2.org/searching#limiting-display-of-the-search-box-to-large-result-sets

person ivanbogomolov    schedule 07.02.2019

Если вы хотите скрыть при первоначальном открытии и заполняете раскрывающийся список с помощью вызова ajax, добавьте следующее в блок ajax в своем объявлении select2:

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

Чтобы затем показать его снова (и сфокусироваться) после успешного запроса ajax:

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

Вы можете попробовать это

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

он закрывает окно результатов поиска, а затем устанавливает невидимый контроль

Вы можете проверить здесь, в документе select2, документах select2

person Foram    schedule 16.07.2019

Ответ @Misha Kobrin мне подходит, поэтому я решил объяснить это подробнее

Вы хотите скрыть окно поиска, вы можете сделать это с помощью jQuery.

например, вы инициализировали плагин select2 в раскрывающемся списке с идентификатором аудитории

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

Пример работает на всех устройствах, на которых работает select2.

person Shahbaz    schedule 10.12.2015

Я отредактировал файл select2.min.js, установив поле ввода select-2__search, которое сгенерировано, на readonly="true".

person capcom    schedule 26.04.2017

Для множественного выбора вам нужно написать js-код, свойства настроек нет.

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

Это упомянуто на их странице: https://select2.org/searching#multi-select

person Faisal Ghaffar    schedule 04.09.2019

попробуйте этот CSS

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

это поле поиска

person Vajiheh habibi    schedule 25.06.2020

person    schedule
comment
+1 Мне это нравится, так как это предотвращает кратковременное появление окна поиска в пользовательском интерфейсе во время выполнения запроса AJAX. это также верно для взлома -1. - person SimonGates; 06.10.2014
comment
Это определенно лучший ответ на вопрос, потому что он действительно предотвращает пользовательский интерфейс событий, таких как поиск ..... - person Sarin Suriyakoon; 30.06.2015
comment
Сработало отлично, спасибо! Просто примечание к любому будущему специалисту Google: для этого требуется полная версия select2 (select2.full. *), Как указано здесь: github.com/select2/select2/issues/2879#issuecomment-149940634 - person Othyn; 12.02.2016
comment
Спасибо, это то, что я искал, поскольку даже со скрытым окном поиска он позволяет сохранить функциональность поиска доступной, когда вы хотите вызвать его программно: $ (# myselect) .select2 (search, search_value) - person nicolas; 06.10.2016
comment
Действительно, это лучший вариант. Как говорит @Othyn, требуется полная версия select2.full.min.js, как указано на веб-сайте: select2.github.io - person robbpriestley; 10.05.2017