Select2 -隐藏搜索框

对于更重要的选择,Select2中的搜索框非常棒。然而,在一个例子中,我有4个简单的硬编码选项。在这种情况下,搜索框是多余的,而且看起来有点傻。有没有办法把它藏起来?我在网上查阅了文档,在构造函数中找不到任何选项。

当然,我可以只使用常规的HTML选择,但为了保持一致性,如果可能的话,我希望使用Select2。

247143 次浏览

查看这个线程https://github.com/ivaynberg/select2/issues/489,你可以通过将minimumResultsForSearch设置为负值来隐藏搜索框。

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

用jQuery移除输入对我有用:

$(".select2-search, .select2-focusser").remove();
.no-search .select2-search {
display:none
}


$("#test").select2({
dropdownCssClass : 'no-search'
});

如果选择显示结果,必须使用这个:

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

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

这是最好的解决方案,干净又好用:

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

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

@Misha Kobrin的回答很适合我,所以我决定多解释一下

你想隐藏搜索框,你可以通过jQuery来实现。

例如,你已经初始化了select2插件在一个下拉列表中有id受众

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

该示例适用于select2工作的所有设备。

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

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

在他们的例子页面:https://select2.org/searching#hiding-the-search-box

$(".js-example-basic-hide-search").select2({
minimumResultsForSearch: Infinity
});
//readonly on all select2 input
$(".select2-search input").prop("readonly", true);
//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);

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

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

如果你想隐藏在初始打开,你正在通过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();
}

如果你想隐藏特定下拉列表的搜索,可以使用id属性。

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

如果你有多个属性在你的选择,这个肮脏的hack工作:

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

你可以试试这个

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

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

你可以在这里检查select2文档select2文档

对于多选你必须写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

试试这个CSS

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

这个输入是搜索字段

你可以为minimumResultsForSearch选项设置infinity-1

解决方案1

裁判:https://select2.org/searching#limiting-display-of-the-search-box-to-large-result-sets

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

解决方案2

裁判:https://select2.org/searching#hiding-the-search-box

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

为了防止有人无意中发现这一点,现在在构造函数中有一个hideSearch选项,它似乎更接近问题所寻找的东西。

echo Select2::widget([ 'name' => 'status','hideSearch' => true, 'data' => [1 => 'Active', 2 => 'Inactive']]);

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