disabilita il menu a discesa scelto da jquery


88

Ho un div selezionato che sto utilizzando il plug-in jquery scelto per definire e aggiungere funzionalità (in particolare, ricerca). Il div ha un aspetto simile a questo,

 <select data-placeholder="add a foobar" id="foobar" style="width: 350px;">
 <option value=""></option>
 </select>

E sto usando il plugin scelto in questo modo,

 $('#foobar').chosen();

Mentre alcuni AJAX vengono caricati, vorrei disabilitare l'intero <select>div. Forse con qualcosa del genere

 $('#foobar').disable()

o questo

 $('#foobar').prop('disabled', true)

Penso che tu abbia avuto l'idea.

Qualche idea su come fare questo? Ho provato una serie di cose diverse, come usare gli idiomi jquery per disabilitare le cose, disabilitare il <select>che disabilita solo la selezione sottostante, non le cose scelte sopra di essa. Ho persino fatto ricorso ad aggiungere manualmente un altro div con un alto z-indexper rendere grigio solo fuori dalla scatola, ma penso che questo sia probabilmente brutto e pieno di bug.

Grazie per l'aiuto!

Risposte:


151

Stai disabilitando solo il tuo select, ma scelto lo rende come divs, spans, ecc. Quindi, dopo aver disabilitato la tua selezione, devi aggiornare il plugin per rendere disabilitato anche il widget di selezione. Puoi provare in questo modo:

$('#foobar').prop('disabled', true).trigger("liszt:updated");

//For non-older versions of chosen you would want to do:

$('#foobar').prop('disabled', true).trigger("chosen:updated");

Ho trovato le informazioni qui

Violino

Una volta aggiornato il widget, tutto ciò che fa è svincolare il clic o altri eventi sul plug-in e cambia la sua opacità a 0,5. Poiché non esiste uno stato di disabilitazione reale per un div.


Sembra che ci sia un errore di battitura liszt:updated, non dovrebbe essere `list: aggiornato?
lanoxx

1
lisztera corretto, ma ora chosen:updatedè il modo corretto di farlo comunque.
Kaleb Anderson

Suggerimento: potrebbe essere necessario specificare l'ultima versione del codice all'inizio nella risposta poiché molti utenti useranno la versione più recente. Ho usato liszt:updatede non ha funzionato poiché non funziona nelle nuove versioni.
Lucky

.trigger("chosen:updated");Serve anche per attivare o disattivare, ad esempio se lo si richiama nuovamente in una funzione.
Arenas V.

$ ('# opzione foobar: not (: selected)'). prop ('disabled', true) .trigger ("selected: updated"); disabiliterà gli altri elementi nella casella personale tranne l'elemento selezionato.
Asad Naeem

51

Nell'ultima versione di scelto, liszt:updatednon funziona più. Devi usare chosen:updated:

$(".chosen-select").attr('disabled', true).trigger("chosen:updated")

Ecco un JSFiddle .


7

PSL era corretto, ma da allora la scelta è stata aggiornata.

Mettilo dopo aver disabilitato:

$("#your-select").trigger("chosen:updated");

6
$('#foobar').prop('disabled', true).trigger("chosen:updated");

Funziona perfettamente !!!! @chosen v1.3.0


1

Puoi provare questo:

$("#foobar").prop('disabled',true).trigger("chosen:updated").chosen('destroy').chosen()


0
$(document).ready(function () {
    $("#foobar").chosen().on('chosen:showing_dropdown',function() {
            $('.chosen-select').attr('disabled', true).trigger('chosen:updated');
            $('.chosen-select').attr('disabled', false).trigger('chosen:updated');
            $('.search-choice-close').hide();
    });
    $('.search-choice-close').hide();
});
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.