Select2 değerini sıfırla ve yer tutucuyu göster


212

Select2 ile değer sıfırlamada yer tutucuyu nasıl ayarlarım? Örneğimde, konumlar veya sınıf seçme kutuları tıklanırsa ve select2 öğemin select2 değerinden daha büyük bir değeri sıfırlanırsa ve varsayılan yer tutucuyu göstermelidir. Bu komut dosyası değeri sıfırlıyor ancak yer tutucuyu göstermiyor

$("#locations, #grade ").change(function() {
   $('#e6').select2('data', {
     placeholder: "Studiengang wählen",
     id: null,
     text: ''
   });
});

$("#e6").select2({
   placeholder: "Studiengang wählen",
   width: 'resolve',
   id: function(e) {
     return e.subject;
   },
   minimumInputLength: 2,
   ajax: {
     url: "index.php?option=com_unis&task=search.locator&tmpl=component&<?php echo JSession::getFormToken() ?>=1",
     dataType: 'json',
     data: function(term, page) {
       return {
         q: term, // search term
         g: $('#grade option:selected').val(),
         o: $('#locations option:selected').val()
       };
     },
     results: function(data, page) {
       return {
         results: data
       };
     }
   },
   formatResult: subjectFormatResult,
   formatSelection: subjectFormatSelection,
   dropdownCssClass: "bigdrop",
   escapeMarkup: function(m) {
     return m;
   }
});

Yanıtlar:


238

Select2 öğesini şöyle tanımlamanız gerekir:

$("#customers_select").select2({
    placeholder: "Select a customer",
    initSelection: function(element, callback) {                   
    }
});

Seçimi sıfırlamak için 2

$("#customers_select").select2("val", "");

7
Bunu bir <birden çok seçim> ile denedim, ancak hatayı alıyorum: <select> öğesine bağlandığında Select2 için 'initSelection' seçeneğine izin verilmiyor.
Sorin Postelnicu

15
Bu benim için işe yaramıyor. Yer tutucu hala görünmüyor.
bcr

5
Select2'nin API'sine göre yeni yöntemi yansıtan aşağıdaki @Lego Stormtroopr cevabına bakınız. Yukarıdaki yöntem kullanımdan kaldırılmıştır.
David

14
V4.0.3 itibariyle .select2("val", "")artık işler gibi görünmüyor .
adamj

31
$("#customers_select").val('').trigger('change') ;Bunu kullandım ve işe yaradı.
Akshay Kulkarni

125

Select2 API'lerini değiştirdi:

Select2: select2("val")Yöntem kullanımdan kaldırıldı ve sonraki Select2 sürümlerinde kaldırılacak. Bunun yerine $ element.val () kullanın.

Bunu şimdi yapmanın en iyi yolu:

$('#your_select_input').val('');

Edit: December 2016 Comments, aşağıdakilerin bunu yapmanın güncellenmiş yolu olduğunu göstermektedir:

$('#your_select_input').val([]);

136
Bu, değeri günceller, ancak doğru bir şekilde görünmesi için bir değişiklik etkinliğini tetiklemeniz gerekir. $('#your_select_input').val('').trigger('change')
Saneem

5
Bu benim için işe yaramıyor. Yer tutucu hala görünmüyor.
bcr

3
Bu, changetetikleyici ekiyle benim için çalışıyor , ancak kullandığımız doğrulama kütüphanesini de tetikliyor - şimdilik kullanımdan kaldırılmış sürümü kullanmam gerekecek.
Dave Newton

6
Select2 4.0.2 kullanılarak bu düzgün çalışmaz. Seçimi sıfırlayacak ve yer tutucuyu geri yükleyecektir, ancak yeni bir değer seçtiğimde (sıfırlama sonrası), ayrıca bir "boş dize" seçeneği (yani içinde sadece "x" olan bir kutu) seçtim.
kounoupis

1
$ ('# your_select_input'). val (''). trigger ('change') yalnızca yer tutucu sağlandığında çalışır. aksi takdirde boş dize seçeneği seçilen seçenek olarak görüntülenir.
amol

116

Kabul edilen cevap benim durumumda çalışmıyor. Bunu deniyorum ve çalışıyor:

Select2 tanımla:

$("#customers_select").select2({
    placeholder: "Select a State",
    allowClear: true
});

veya

$("#customers_select").select2({
    placeholder: "Select a State"
});

Sıfırlamak:

$("#customers_select").val('').trigger('change')

veya

$("#customers_select").empty().trigger('change')

2
Yer tutucu tanımlanmadıkça allowClear'ın çalışmadığını fark ettim
Dan Tappin

Firefox$('#your_select_input').val('').trigger('change')$('#your_select_input').val('');
Alex Art'ta

1
bu benim için çalışıyor, v4.0.3 kullanıyorum select2 tüm verileri siler
ClearBoth

8
$ ("# customer_select"). empty (). trigger ('change') benim için çalışıyor. :)
Munna Khan

1
'$ ("# customer_select"). empty (). trigger (' change ')' benim için çalıştı, teşekkürler!
Tahirhan

52

Benim için işe yarayabilecek tek şey:

$('select2element').val(null).trigger("change")

Sürüm 4.0.3 kullanıyorum

Referans

Select2 Belgelerine Göre


2
Ayrıca v4.0.3 kullanıyorum ve $('select2element').val("").trigger("change")çok iyi çalışıyor.
Roubi

Lütfen <select> cihazınızda boş bir <option> seçeneğinin olması gerektiğini unutmayın. Eğer 2'yi Seç ile ajax kullanarak, bu irade yardım -. $ ( '# SelectFieldId') başa getirebilir ( '</ option> <= "Seçilen" Belirlenen seçenek>')
musicjerm

20

Select2 sürüm 4.0.9 ile bu benim için çalışıyor:

$( "#myselect2" ).val('').trigger('change');

1
Bu benim select2 açılır menü boş bıraktı. Benim için çalıştı. Teşekkürler.
disha

18

Select2 belirli bir CSS sınıfı kullanır, bu yüzden sıfırlamanın kolay bir yolu:

$('.select2-container').select2('val', '');

Ve aynı formda birden fazla Select2 varsa, hepsi bu tek komutla sıfırlanacak.



11

SEÇİLMİŞ DEĞERİ KALDIRMAK İÇİN

$('#employee_id').select2('val','');

SEÇENEK DEĞERLERİNİ TEMİZLEME

$('#employee_id').html('');

1
fefe, yer tutucu metnin yeniden ayarlanmasını istiyor. Yani bu cevabın sadece ilk kısmı geçerlidir.
nterms

2
Evet bu yüzden cevapların başlığını vurgularım.
Shanka SMS

2
İlk cevap aslında 4.0'dan fazla geçerli değil. Ama ikinci seçenek beni kurtardı! Select2'yi gerçekten temizlemek istediğinizde çözüm budur. .Val ('') öğesini 2 seçmek için ayarlamak yeterli değildir. Html'yi de temizlemeniz gerekir. Çok teşekkürler!!!
wazza

9

Bu eski bir soru olduğunu biliyorum, ama bu select2 sürüm 4.0 için çalışıyor

 $('#select2-element').val('').trigger('change');

veya

$('#select2-element').val('').trigger('change.select2'); 

buna bağlı değişiklik olaylarınız varsa


Mükemmel çözüm. Yeni eklenen select2 kutusunu hedeflemek için .last () işlevi eklemek zorunda kaldım. $('#select2-element').last().val('').trigger('change.select2');
InsParbo

8

Select2'yi yapılandırmak için aşağıdakileri kullanın

    $('#selectelementid').select2({
        placeholder: "Please select an agent",
        allowClear: true // This is for clear get the clear button if wanted 
    });

Ve girişi programlı olarak temizlemek için

    $("#selectelementid").val("").trigger("change");
    $("#selectelementid").trigger("change");

8

Doğru yol budur:

 $("#customers_select").val('').trigger('change');

Select2'nin son sürümünü kullanıyorum.


6

Öncelikle select2'yi şöyle tanımlamanız gerekir:

$('#id').select2({
    placeholder: "Select groups...",
    allowClear: true,
    width: '100%',
})

Select2 öğesini sıfırlamak için aşağıdaki kod bloğunu kullanabilirsiniz:

$("#id > option").removeAttr("selected");
$("#id").trigger("change");

6

Seçiminizi şu şekilde silebilirsiniz:

$('#object').empty();

Ama sizi yer tutucunuza geri döndürmeyecek.

Yani bu yarım bir çözüm


5

Yukarıdaki çözümleri denedim ama benim için işe yaramadı.

Bu, değişikliği tetiklemeniz gerekmeyen bir tür hack'tir.

$("select").select2('destroy').val("").select2();

veya

$("select").each(function () { //added a each loop here
        $(this).select2('destroy').val("").select2();
});

5

Uzak verileri yükleyen kullanıcılar için bu , a2x'i tetiklemeden select2'yi yer tutucuya sıfırlar. V4.0.3 ile çalışır:

$("#lstProducts").val("").trigger("change.select2");

Benim için çalıştı ama tetikleyicim sadece 'değişim' oldu
Gregory R. Sudderth

Ajax verilerini kullanarak bir Select2'yi başka bir Select2'den sıfırlamam için çalışan tek çözüm buydu.
IlludiumPu36

5

Yani, formu sıfırlamak için bazılarınızda bir sıfırlama düğmesi olacaktır. Komut dosyası etiketine aşağıdaki kodu ekleyin

$('.your_btn_class').click(function(){
    $('#select_field_id').val([]);
    $("#select_field_id").select2({
    placeholder: "this is a placeholder",
    });
});

Veya yalnızca yer tutucu tutmadan seçim alanını boşaltmak için:

$('.your_btn_class').click(function(){
    $('#select_field_id').val([]);
 });

3

Yer tutucu için

$("#stateID").select2({
    placeholder: "Select a State"
});

Bir seçimi sıfırlamak için 2

$('#stateID').val('');
$('#stateID').trigger('change');

Bu yardımcı olur umarım


2

Tavsiye edilen yolu takip ederek . Https://select2.github.io/options.html#my-first-option-is-being-displayed-instead-of-my-placeholder dokümanında bulundu (bu oldukça yaygın bir sorun gibi görünüyor) :

Bu olduğunda, genellikle <option></option>ilk seçenek olarak bir boşluğunuz olmadığı anlamına gelir <select>.

de olduğu gibi:

<select>
   <option></option>
   <option value="foo">your option 1</option>
   <option value="bar">your option 2</option>
   <option value="etc">...</option>
</select>

2

Ben de bu sorunu yaşıyordu ve yer tutucu sıfırlanmadan önce val(null).trigger("change");bir No select2/compat/inputDatahata atmak kaynaklanıyor . Hatayı yakalayıp doğrudan yer tutucuyu (genişlikle birlikte) ayarlayarak çözdüm. Not: Birden fazla varsa, her birini yakalamanız gerekir.

try{
    $("#sel_item_ID").select2().val(null).trigger("change");
}catch(err){
    console.debug(err)
}
try{
    $("#sel_location_ID").select2().val(null).trigger("change");
}catch(err){
    console.debug(err)
}
$('.select2-search__field')[0].placeholder='All Items';
$('.select2-search__field')[1].placeholder='All Locations';
$('.select2-search__field').width(173);

Select2 4.0.3 kullanıyorum


changeEtkinliğe bağlı bir dinleyiciniz var gibi görünüyor . Tetiklemeyi deneyin change.select2- bu, bağlı dinleyicileri tetiklemez (bkz. Github.com/select2/select2/issues/3620 ).
Paul

2

v.4.0.x itibariyle ...

değerleri temizlemek, aynı zamanda yer tutucu kullanımını geri yüklemek için ...

.html('<option></option>');  // defaults to placeholder

boşsa, ilk seçenek öğesini seçer, bunun yerine istediğiniz şey olmayabilir

.html(''); // defaults to whatever item is first

açıkçası ... Select2 popo böyle bir acı, yerini değiştirmedi beni şaşırtıyor.


1

Ben yukarıdaki çözümleri denedim ama hiçbiri sürüm 4x ile çalıştı.

Ne elde etmek istiyorum: tüm seçenekleri temizleyin ama yer tutucusuna dokunmayın. Bu kod benim için çalışıyor.

selector.find('option:not(:first)').remove().trigger('change');

Selector.find ('option: not (: first)'). Html (''); İşe yaramalı.
wazza

1

Select2 sürüm 3.2 kullanarak bu benim için çalıştı:

$('#select2').select2("data", "");

Uygulamaya gerek yoktu initSelection


1
Bunu yapmanın en basit yolu buydu. Diğer yöntemler benim için işe yaramadı.
chevybow

1

Burada ilk 10 çözümü denedikten ve başarısız olduktan sonra, bu çözümü çalışmak için buldum (bkz.

(function ($) {
   $.fn.refreshDataSelect2 = function (data) {
       this.select2('data', data);

       // Update options
       var $select = $(this[0]);
       var options = data.map(function(item) {
           return '<option value="' + item.id + '">' + item.text + '</option>';
       });
       $select.html(options.join('')).change();
   };
})(jQuery);

Değişiklik daha sonra yapılır:

var data = [{ id: 1, text: 'some value' }];
$('.js-some-field').refreshDataSelect2(data);

(Yazar aslen var $select = $(this[1]);, var $select = $(this[0]);yukarıda gösterdiğim bir yorumcunun düzeltildiğini gösterdi .)


1

Bu kodu js dosyanıza kullanın

$('#id').val('1');
$('#id').trigger('change');

0

Bunu kullanarak değeri silmeden önce $("#customers_select").select2("val", ""); Sıfırlama tıklaması üzerinde başka bir denetime odaklanmayı deneyin.

Bu, yer tutucuyu tekrar gösterecektir.


0

DOM arayüzü zaten başlangıç ​​durumunu takip ediyor ...

Yani aşağıdakileri yapmak yeterlidir:

$("#reset").on("click", function () {
    $('#my_select option').prop('selected', function() {
        return this.defaultSelected;
    });
});

0

Ne zaman yapsam

$('myselectdropdown').select2('val', '').trigger('change');

Üç ila dört tetikleyiciden sonra bir tür gecikme yaşamaya başladım. Sanırım bir bellek sızıntısı var. Bu benim kod içinde değil çünkü bu satırı kaldırmak, benim app gecikme ücretsizdir.

AllowClear seçeneklerinin true olarak ayarlanmış olması nedeniyle,

$('.select2-selection__clear').trigger('mousedown');

Bunu $ ('myselectdropdown') izleyebilir. Select2 ('close'); açık öneri açılır menüsünü kapatmak istemeniz durumunda select2 dom öğesinde olay tetikleyicisi.


0

Bunu yapmak için bir [çok] hacky yolu (sürüm 4.0.3 için çalıştığını gördüm):

var selection = $("#DelegateId").data("select2").selection;
var evt = document.createEvent("UIEvents");
selection._handleClear(evt);
selection.trigger("toggle", {});
  • allowClear öğesi true olarak ayarlanmalıdır
  • select öğesinde boş bir seçenek bulunmalıdır

0

Benim çözümüm:

$el.off('select2:unselect')
$el.on('select2:unselect', function (event) {
    var $option = $('<option value="" selected></option>');
    var $selected = $(event.target);

    $selected.find('option:selected')
             .remove()
             .end()
             .append($option)
             .trigger('change');
    });

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.