select2-隐藏搜索框


206

对于我更重要的选择,Select2中的搜索框很棒。但是,在一个实例中,我仅选择了4个硬编码选项。在这种情况下,搜索框是多余的,看起来有点傻。有可能将其隐藏吗?我在线浏览了文档,在构造函数中找不到任何选项。

我当然可以只使用常规的html select,但是为了保持一致,我想尽可能使用Select2。


谢谢你的主意。尽管我知道jQuery中的.show()和.hide(),但我并没有想到,如果我在自己的选项之外进行了类似的操作,该插件将继续工作。尽管如此,乍看上去它似乎是可行的:)
EleventyOne

您能否解释一下hide方法的作用及其工作原理?您是在告诉我它只隐藏搜索框,因为似乎根本不是这种情况
IcedD​​ante

@IcedD​​ante hide此处描述了该方法:api.jquery.com/hide只要您仅将其应用于适当的选择器,是的,它应该单独隐藏搜索框。不过,可以使用一些特定于插件的方法来隐藏它,我建议您改为使用它(请参见下文)。
EleventyOne'3

Answers:


474

请参阅此线程https://github.com/ivaynberg/select2/issues/489,您可以通过将minimumResultsForSearch设置为负值来隐藏搜索框。

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

14
github票证中提到的主要问题是在移动设备上,它仍然显示键盘。我们已将select2替换为selected。
toutpt

2
并完美地转换为angular-ui ui-select2!
rhigdon

非常方便的选择!我用它来显示搜索10个或更多选项。无需手动删除搜索输入。
blazkovicz 2014年

@KevinBrown Infinity不是负值。您的编辑使文本和代码不匹配。与链接的问题特别指出负值是正确的受支持方法。与此相关的问题还声称:“ minimumResultsForSearch的高价值只会在打开的select中隐藏搜索框。但是,如果我们在select处于关闭状态且处于焦点状态时键入一些字母,无论它有多高,搜索都会弹出”,尽管我无法重现该特定问题在当前版本中,这可能是较旧版本中的真正问题。由于这些原因,我回滚了您的编辑。

1
但是,它完全禁用了搜索功能。
sudip


34
.no-search .select2-search {
    显示:无
}

$(“#test”)。select2({
    dropdownCssClass:'无搜索'
}); 

1
我喜欢+1,因为它可以防止在发出AJAX请求时在用户界面中短暂显示搜索框。-1 hack也是如此。
SimonGates 2014年

这绝对是该问题的最佳答案,因为它确实可以防止事件ui,例如“ searching ....”。
Sarin Suriyakoon

5
工作完美,谢谢!只是对未来的Google员工的说明,这需要select2完整版本(select2.full。*),如下所示:github.com/select2/select2/issues/2879#issuecomment-149940634
Othyn

1
谢谢,这是我一直在寻找的东西,因为即使隐藏了搜索框,当您希望以编程方式调用它时,它也可以保持搜索功能可用:$(“#myselect”)。select2(“ search”,“ search_value”)
nicolas

确实,这是最好的选择。正如@Othyn所说,需要完整版的select2.full.min.js,如网站上所述:select2.github.io
robbpriestley

26

版本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>



3

这是最好的解决方案,干净且工作良好:

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

然后,创建一个类 .hidden { display;none; }


过去这可能效果很好,但不适用于最新版本的select2。
马特·布朗


1

如果选择显示结果,则必须使用此方法:

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

它关闭搜索结果框,然后将控件设置为不可见


1

我喜欢根据select中的选项数量动态地执行此操作;隐藏具有10个或更少结果的选择搜索,我这样做:

$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

如果要在初次打开时隐藏并且要通过ajax调用填充下拉列表,请在select2声明的ajax块中添加以下内容:

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

1

你可以试试这个

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

它关闭搜索结果框,然后将控件设置为不可见

您可以在select2文档中检查select2文档


0

@Misha Kobrin的回答对我来说很有效,所以我决定进一步解释

您想隐藏搜索框,您可以通过jQuery完成。

例如,您已经在具有ID受众群体的下拉菜单中初始化了select2插件

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

该示例适用于select2可在其上运行的所有设备。


0

我编辑了select2.min.js文件,将select-2__search生成的输入字段设置为readonly="true"


0

对于多选,您必须编写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


0

试试这个CSS

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

此输入是搜索字段

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.