Voglio aggiungere una risposta "in ritardo", perché ho lottato con change
, keyup
e search
oggi, e forse quello che ho trovato alla fine potrebbe essere utile anche per gli altri. Fondamentalmente, ho un pannello di ricerca come tipo e volevo solo reagire correttamente alla stampa della piccola X (sotto Chrome e Opera, FF non lo implementa) e, di conseguenza, deselezionare un riquadro del contenuto.
Ho avuto questo codice:
$(some-input).keyup(function() {
// update panel
}
$(some-input).change(function() {
// update panel
}
$(some-input).on("search", function() {
// update panel
}
(Sono separati perché volevo verificare quando e in quali circostanze è stato chiamato ciascuno).
Si scopre che Chrome e Firefox reagiscono in modo diverso. In particolare, Firefox considera change
"ogni modifica all'input", mentre Chrome lo considera "quando si perde lo stato attivo E il contenuto viene modificato". Quindi, su Chrome la funzione "pannello di aggiornamento" è stata chiamata una volta, su FF due volte per ogni sequenza di tasti (uno in keyup
, uno in change
)
Inoltre, la cancellazione del campo con la piccola X (che non è presente in FF) ha generato l' search
evento in Chrome: no keyup
, no change
.
La conclusione? Usa input
invece:
$(some-input).on("input", function() {
// update panel
}
Funziona con lo stesso comportamento in tutti i browser che ho testato, reagendo ad ogni modifica del contenuto di input (copia-incolla con il mouse, completamento automatico e "X" inclusi).
onchange
evento?