select2 - arama kutusunu gizleme


206

Daha önemli seçimlerim için, Select2'deki arama kutusu harika. Ancak, bir örnekte, 4 sabit kodlu seçimlerden oluşan basit bir seçimim var. Bu durumda, arama kutusu gereksizdir ve biraz aptalca görünür. Bir şekilde saklamak mümkün mü? Çevrimiçi belgelere bir göz attım ve yapıcıda bunun için herhangi bir seçenek bulamadım.

Tabii ki, sadece normal bir html seçimi kullanabilirsiniz, ancak tutarlılık için mümkünse Select2 kullanmak istiyorum.


Fikir için teşekkürler. JQuery'de .show () ve .hide () hakkında bilgi sahibi olmama rağmen, kendi seçeneklerinin dışında böyle bir şey yapsaydım eklentinin çalışmaya devam edeceği bana gelmedi. Yine de, ilk bakışta, işe yarıyor gibi görünüyor :)
EleventyOne

Hide yönteminin ne yaptığını ve nasıl çalıştığını açıklayabilir misiniz? Bana sadece arama kutusunu gizlediğini mi söylüyorsun çünkü durum hiç de öyle görünmüyor
IcedDante

@IcedDante hideYöntem burada açıklanmıştır: api.jquery.com/hide Sadece uygun seçiciye uyguladığınız sürece, evet, arama kutusunu tek başına gizlemelidir. Bununla birlikte, gizlemek için kullanılabilecek eklentiye özgü yöntemler vardır, bunun yerine kullanmanızı öneririm (aşağıya bakın).
EleventyOne

Yanıtlar:


474

Bu konuya bakın https://github.com/ivaynberg/select2/issues/489 , minimumResultsForSearch öğesini negatif bir değere ayarlayarak arama kutusunu gizleyebilirsiniz.

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

14
Burada github biletinde belirtildiği gibi ana sorun mobil hala klavyeyi görüntülemek. Biz select2 yerine select2 koyduk.
toutpt

2
ve mükemmel açısal-ui ui-select2'ye çevirir!
rhigdon

Çok kullanışlı bir seçenek! Ben 10 ve daha fazla seçenek için arama göstermek için kullandım. Arama girişinin manuel olarak kaldırılmasına gerek yoktur.
blazkovicz

@KevinBrown Infinitynegatif bir değer değil. Düzenlemeniz metin ve kodun eşleşmemesini sağlar. Özellikle bağlantılı olan konu negatif bir değerin doğru desteklenen yaklaşım olduğunu göstermektedir. "MinimumResultsForSearch değeri yüksek değeri yalnızca açık seçili arama kutusunu gizler. Ancak seçim kapalı ve odaklanmışken bir harf yazarsak - arama ne kadar yüksek olursa olsun arama açılır" ve bu sorunu yeniden oluşturamama rağmen mevcut sürümde, eski sürümlerde gerçek bir sorun olması muhtemeldir. Bu nedenlerle, düzenlemenizi geri aldım.

1
Ancak, arama işlevini tamamen devre dışı bırakır.
Sudip


34
.no-search .select2-search {
    görüntü yok
}

$ ( "# Test"). Select2 ({
    dropdownCssClass: 'arama yok'
}); 

1
+1 AJAX isteği yapılırken arama kutusunun kullanıcı arayüzünde kısa bir süre görünmesini engellediği için bunu beğendim. bu -1 hack için de geçerlidir.
SimonGates

Bu soru için kesinlikle en iyi cevap çünkü gerçekten "arama ...." gibi olay ui önlemek.
Sarin Suriyakoon

5
Mükemmel çalıştı, teşekkürler! Gelecekteki herhangi bir Google çalışanı için sadece bir not, bu, burada belirtildiği gibi select2 tam sürümünü (select2.full. *) Gerektirir
Othyn

1
Teşekkürler, arama kutusu gizli olsa bile, programlı olarak aramak istediğinizde arama işlevini kullanılabilir tutmaya izin verdiğinden beri aradığım şey: $ ("# myselect"). Select2 ("arama", "arama_değeri")
nicolas

Gerçekten de bu en iyi seçenektir. @Othyn'in tam sürümün gerekli olduğunu belirttiği gibi web sitesinde belgelendiği gibi select2.full.min.js
robbpriestley

26

Sürüm 4.0.3

Kullanıcı arayüzü gereksinimlerini JavaScript kodunuzla karıştırmamaya çalışın.

İşaretleme içindeki arama kutusunu şu nitelikle gizleyebilirsiniz:

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

Biçimlendirme

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

Misal

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

JQuery ile girişleri kaldırmak benim için çalışıyor:

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

Mükemmel, mobilde klavye görüntülenmiyor!
Pieter Meiresone

Bu, sayfadaki tüm açılır listeler için geçerlidir, ancak yalnızca belirli açılır menüleri hedefleyemiyorum. Select2 kimliğinin alt öğesi olmadıkları için hedeflenemez.
Shaun Lebron

2
belirtmek için bir sarıcı ekleyin
YAMM

3

Bu, temiz ve iyi çalışan en iyi çözümdür:

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

Ardından, bir sınıf oluşturun .hidden { display;none; }


Bu geçmişte iyi çalışmış olabilir, ancak select2'nin en son sürümünde çalışmaz.
Matt Browne

3

Belirli bir açılır menü için aramayı gizlemek istiyorsanız bunun için id niteliğini kullanın.

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

1

Eğer seçim sonuçları göster ise, bunu kullanmak zorundasınız:

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

arama sonuçları kutusunu kapatır ve ardından denetimi görünmez yapar


1

Bunu seçimdeki seçeneklerin sayısına bağlı olarak dinamik olarak yapmak istiyorum; seçimleri 10 veya daha az sonuçla gizlemek için şunu yaparım:

$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

İlk açılışta gizlemek istiyorsanız ve açılır menüyü ajax çağrısı ile dolduruyorsanız, select2 bildiriminizdeki ajax bloğuna aşağıdakileri ekleyin:

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

Ajax isteğiniz başarılı olduktan sonra tekrar göstermek (ve odaklanmak) için:

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

1

Bunu deneyebilirsin

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

arama sonuçları kutusunu kapatır ve ardından denetimi görünmez yapar

Select2 belge select2 belge içinde kontrol edebilirsiniz.


0

@Misha Kobrin'in yanıtı benim için iyi çalışıyor Bu yüzden daha fazla açıklamaya karar verdim

Arama kutusunu gizlemek istiyorsanız jQuery ile yapabilirsiniz.

örneğin, kimlik kitlesine sahip bir açılır menüde select2 eklentisini başlattınız

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

Örnek select2'nin çalıştığı tüm cihazlarda çalışır.


0

Oluşturulan girdi alanını select2.min.jsayarlamak için dosyayı düzenledim .select-2__searchreadonly="true"


0

Çoklu seçim için js kodu yazmanız gerekir, hiçbir ayar özelliği yoktur.

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

Bu, sayfalarında bahsedilen: https://select2.org/searching#multi-select


0

bu CSS'yi dene

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

bu girdi arama alanıdır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.