Questo potrebbe non rispondere direttamente alla tua domanda, ma questo problema potrebbe essere risolto con semplici regolazioni del livello di progettazione. Capisco che questo potrebbe non essere applicabile al 100% a tutti i casi d'uso, ma ti consiglio vivamente di considerare di ripensare il flusso di utenti dell'applicazione e se è possibile implementare il seguente suggerimento di progettazione.
Ho deciso di fare qualcosa di semplice che l'hacking alternative per onChange()
utilizzare altri eventi che non erano in realtà destinati a questo scopo ( blur
, click
, etc.)
Il modo in cui l'ho risolto:
Pre-pendi semplicemente un tag opzione segnaposto come select che non ha alcun valore.
Quindi, invece di utilizzare solo la seguente struttura, che richiede alternative hack-y:
<select>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
Prendi in considerazione l'utilizzo di questo:
<select>
<option selected="selected">Select...</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
Quindi, in questo modo, il tuo codice è MOLTO più semplificato e onChange
funzionerà come previsto, ogni volta che l'utente decide di selezionare qualcosa di diverso dal valore predefinito. Potresti anche aggiungere l' disabled
attributo alla prima opzione se non vuoi che lo selezionino di nuovo e costringerli a selezionare qualcosa dalle opzioni, innescando così un onChange()
incendio.
Al momento di questa risposta, sto scrivendo una complessa applicazione Vue e ho scoperto che questa scelta progettuale ha semplificato molto il mio codice. Ho trascorso ore su questo problema prima di decidere con questa soluzione e non ho dovuto riscrivere molto del mio codice. Tuttavia, se fossi andato con le alternative hacky, avrei dovuto tenere conto dei casi limite, per evitare il doppio licenziamento delle richieste Ajax, ecc. Ciò non confonde il comportamento predefinito del browser come un bel bonus (testato su dispositivo mobile anche i browser).
A volte, devi solo fare un passo indietro e pensare al quadro generale per la soluzione più semplice.