Trigger change () evento quando si imposta il valore di con la funzione val ()

Qual è il modo più semplice e migliore per triggersre l’evento change quando si imposta il valore dell’elemento select .

Mi aspettavo che eseguendo il seguente codice

$('select#some').val(10); 

o

 $('select#some').attr('value', 10); 

risulterebbe nell’innescare l’evento di cambiamento, che penso sia una cosa abbastanza logica da fare. Destra?

Bene, non è il caso. Hai bisogno di triger change () evento facendo questo

     $('select#some').val(10).change(); 

    o

     $('select#some').val(10).trigger('change'); 

    ma sto cercando una soluzione che innescherebbe l’evento di cambiamento non appena il valore di selezione viene modificato da qualche codice javascript.

    Ho avuto un problema molto simile e non sono abbastanza sicuro di cosa stia avendo un problema, poiché il codice suggerito ha funzionato benissimo per me. Immediatamente (un tuo requisito) triggers il seguente codice di modifica.

     $('#selectField').change(function(){ if($('#selectField').val() == 'N'){ $('#secondaryInput').hide(); } else { $('#secondaryInput').show(); } }); 

    Poi prendo il valore dal database (questo è usato su un modulo sia per i nuovi input che per modificare i record esistenti), impostalo come valore selezionato e aggiungo il pezzo mancante per triggersre il codice sopra, “.change () “.

     $('#selectField').val(valueFromDatabase).change(); 

    In modo che se il valore esistente dal database è ‘N’, nasconde immediatamente il campo di input secondario nel mio modulo.

    Una cosa che ho scoperto (nel modo più duro), è che dovresti avere

     $('#selectField').change(function(){ // some content ... }); 

    definito PRIMA di utilizzare

     $('#selectField').val(10).trigger('change'); 

    o

      $('#selectField').val(10).change(); 

    La risposta diretta è già in una domanda doppia: perché l’evento di modifica jQuery non si triggers quando imposto il valore di una selezione utilizzando val ()?

    Come probabilmente saprai, l’impostazione del valore della selezione non innesca l’evento change (), se stai cercando un evento che viene triggersto quando il valore di un elemento è stato modificato tramite JS, non ce n’è uno.

    Se vuoi davvero farlo, immagino che l’unico modo sia scrivere una funzione che controlli il DOM su un intervallo e tiene traccia dei valori modificati, ma sicuramente non farlo a meno che tu non debba (non sono sicuro del motivo per cui dovresti averne bisogno)

    Aggiunta questa soluzione:
    Un’altra ansible soluzione potrebbe essere quella di creare la propria funzione wrapper .val() e farla triggersre un evento personalizzato dopo aver impostato il valore su .val() , quindi quando si utilizza il wrapper .val () per impostare il valore di attiverà il tuo evento personalizzato che puoi intercettare e gestire.

    Assicurati di return this , quindi è concatenabile in modo jQuery

    Lo separo e quindi utilizzo un confronto di identity framework per dettare cosa farà dopo.

     $("#selectField").change(function(){ if(this.value === 'textValue1'){ $(".contentClass1").fadeIn(); } if(this.value === 'textValue2'){ $(".contentclass2").fadeIn(); } });