Modifica della selezione in una selezione con il plug-in Chosen


105

Sto cercando di modificare l'opzione attualmente selezionata in una selezione con il plug-in Chosen.

La documentazione copre l'aggiornamento dell'elenco e l'attivazione di un evento quando viene selezionata un'opzione, ma nulla (che posso vedere) sulla modifica esterna del valore attualmente selezionato.

Ho creato un jsFiddle per dimostrare il codice e i miei tentativi di modificare la selezione:

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

Non sono riuscito a eseguire la dimostrazione di jsfiddle che hai fornito. potresti aggiornarlo per favore.
— Lucky

Va bene. Il motivo per cui non ho potuto eseguire la tua dimostrazione era che la libreria scelta puntava a un URL errato. Ecco il jsfiddle
— Lucky

Risposte:


214

Dalla sezione "Aggiornamento dinamico scelto" nei documenti : Devi attivare l'evento "scelto: aggiornato" sul campo

$(document).ready(function() {

    $('select').chosen();

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

});

NOTA: le versioni precedenti alla 1.0 utilizzavano quanto segue:

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

6
Cordiali saluti: sono stati aggiornati alla 1.0 che ora utilizza chosen:updatedinvece diliszt:updated
— Henesnarfel

Sono inciampato qui mentre stavo cercando di trovare un modo per selezionare la migliore opzione attualmente corrispondente da un elenco di risultati di ricerca scelti a più selezioni (ogni volta che lo stato attivo è stato perso). Ecco un breve violino sulle mie esplorazioni. Non è necessario che l'evento attivi alcun evento. Forse è utile anche per qualcun altro ... :)
— Timo

nonostante il codice di cui sopra funziona, questo accade solo una volta. Voglio dire che se faccio di nuovo clic sul menu in cui è collegato il plugin scelto non assume il valore che è dentro val (). Perché questo potrebbe accadere
— Dimitris Papageorgiou

9
So che questo è un vecchio post, ma un modo più semplice per aggiornare è solo in una stringa: $('select').val(2).trigger("chosen:updated");
— Andrew Newby

10
@ Lucas Welper: dovresti anche cambiare $('select').val(2);in $('select').val(2).change();, perché la modifica dell'opzione selezionata di una selezione con jQuery non attiva l'evento di modifica e alcune persone potrebbero averne bisogno.
— macchineaddict

41

La mia risposta è in ritardo, ma voglio aggiungere alcune informazioni che mancano in tutte le risposte precedenti.

1) Se si desidera selezionare un valore singolo nella selezione prescelta.

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

2) Se si utilizza più selezioni scelte, potrebbe essere necessario impostare più valori contemporaneamente.

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

Informazioni raccolte dai seguenti link:
1) Chosen Docs
2) Chosen Github Discussion


Notando che "22", "25" ecc. Sono i valori, non l'HTML interno, ad esempio <option value = "25"> sometext </option>
— Fadi Bakoura

2

A volte è necessario rimuovere le opzioni correnti per manipolare le opzioni selezionate.

Ecco un esempio su come impostare le opzioni:

<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 (incluse le opzioni per aggiungere howto): https://jsfiddle.net/59x3m6op/1/


1
Per conto nel caso in cui il prescelto non ha valore ancora, aggiornamento var selected = mySelect.val();a var selected = mySelect.val() || [];posto.
— ElliotSchmelliot

0

In caso di più tipi di selezione e / o se si desidera rimuovere gli elementi già selezionati uno per uno, direttamente all'interno di un elenco a discesa, è possibile utilizzare qualcosa come:

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');
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.