Seçilmiş eklenti ile bir seçimde seçimi değiştirme


105

Seçilmiş eklenti ile bir seçimde şu anda seçili olan seçeneği değiştirmeye çalışıyorum.

belgeleme kapakları listesini güncellemek ve dıştan seçili değerini değiştirerek bir seçenek seçilirse olay, başka bir şey (görebildiğim) tetikleme.

Kodu ve seçimi değiştirmeye çalıştığımı göstermek için bir jsFiddle yaptım :

$('button').click(function() {
    $('select').val(2);
    $('select').chosen().val(2);
    $('select').chosen().select(2);
});

Sağladığınız jsfiddle gösterisini çalıştıramadım. lütfen günceller misin?
Lucky

Tamam. Gösterinizi yürütemememin nedeni, seçilen kitaplığın yanlış bir url'yi işaret ediyor olmasıydı. İşte güncellenmiş jsfiddle
Lucky

Yanıtlar:


214

Dokümanlardaki "Seçileni Dinamik Olarak Güncelleme" bölümünden: Alandaki " selected : updated" olayını tetiklemeniz gerekir

$(document).ready(function() {

    $('select').chosen();

    $('button').click(function() {
        $('select').val(2);
        $('select').trigger("chosen:updated");
    });

});

NOT: 1.0'dan önceki sürümler aşağıdakileri kullanır:

$('select').trigger("liszt:updated");

6
Bilginize: Şu anda chosen:updatedyerine kullanılan 1.0'a güncelledilerliszt:updated
Henesnarfel

Çoktan seçmeli seçilmiş bir arama sonucu listesinden şu anda en iyi eşleşen seçeneği seçmenin bir yolunu bulmaya çalışırken (odak kaybolduğunda) burada tökezledim. İşte keşiflerim hakkında kısa bir keman . Herhangi bir olayı tetiklemenize gerek yoktur. Belki başkası için de kullanışlıdır ... :)
Timo

Yukarıdaki kod işe yarasa da bu sadece bir kez oluyor yani seçilen eklentinin eklendiği menüye tekrar tıklarsam val () içindeki değeri almıyor. Bu neden oluyor
Dimitris Papageorgiou

9
Bunun eski bir gönderi olduğunu biliyorum - ancak güncellemenin daha basit bir yolu yalnızca bir dizede: $('select').val(2).trigger("chosen:updated");
Andrew Newby

10
@Lucas Welper: Ayrıca değişmelidir $('select').val(2);içine $('select').val(2).change();jQuery ile seçilmiş seçilmiş seçeneğini değiştirerek değişim olayı tetiklemez çünkü ve bazı insanlar bunu gerekebilir.
machineaddict

41

Cevabım gecikti, ancak yukarıdaki cevapların hepsinde gözden kaçan bazı bilgileri eklemek istiyorum.

1) Seçilen seçimde tek bir değer seçmek istiyorsanız.

$('#select-id').val("22").trigger('chosen:updated');

2) Birden fazla seçilen seçimi kullanıyorsanız, tek seferde birden çok değer ayarlamanız gerekebilir.

$('#documents').val(["22", "25", "27"]).trigger('chosen:updated');

Aşağıdaki bağlantılardan toplanan bilgiler:
1) Seçilen Dokümanlar
2) Seçilmiş Github Tartışması


"22", "25" vb. Değerler iç HTML değil, örneğin <option value = "25"> sometext </option>
Fadi Bakoura

2

Bazen seçilen seçenekleri değiştirmek için mevcut seçenekleri kaldırmanız gerekir.

Seçeneklerin nasıl ayarlanacağına dair bir örnek:

<select id="mySelectId" class="chosen-select" multiple="multiple">
  <option value=""></option>
  <option value="Argentina">Argentina</option>
  <option value="Germany">Germany</option>
  <option value="Greece">Greece</option>
  <option value="Japan">Japan</option>
  <option value="Thailand">Thailand</option>
</select>

<script>
activateChosen($('body'));
selectChosenOptions($('#mySelectId'), ['Argentina', 'Germany']);

function activateChosen($container, param) {
    param = param || {};
    $container.find('.chosen-select:visible').chosen(param);
    $container.find('.chosen-select').trigger("chosen:updated");
}

function selectChosenOptions($select, values) {
    $select.val(null);                                  //delete current options
    $select.val(values);                                //add new options
    $select.trigger('chosen:updated');
}
</script>

JSFiddle (ekleme seçenekleri dahil): https://jsfiddle.net/59x3m6op/1/


1
Seçme, henüz güncelleme değeri yoktur durumu için hesaba var selected = mySelect.val();için var selected = mySelect.val() || [];yerine.
ElliotSchmelliot

0

Birden fazla seçim türü olması durumunda ve / veya önceden seçilmiş öğeleri tek tek, doğrudan bir açılır liste öğeleri içinde kaldırmak istiyorsanız, aşağıdaki gibi bir şey kullanabilirsiniz:

jQuery("body").on("click", ".result-selected", function() {
    var locID = jQuery(this).attr('class').split('__').pop();
    // I have a class name: class="result-selected locvalue__209"
    var arrayCurrent = jQuery('#searchlocation').val();
    var index = arrayCurrent.indexOf(locID);
    if (index > -1) {
        arrayCurrent.splice(index, 1);
    }
    jQuery('#searchlocation').val(arrayCurrent).trigger('chosen:updated');
});
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.