Quero adicionar uma resposta "tardia", porque lutei com change
, keyup
e search
hoje, e talvez o que encontrei no final também possa ser útil para outras pessoas. Basicamente, tenho um painel de pesquisa como tipo e só queria reagir adequadamente à pressão do pequeno X (no Chrome e Opera, o FF não o implementa) e limpar um painel de conteúdo como resultado.
Eu tinha esse código:
$(some-input).keyup(function() {
// update panel
}
$(some-input).change(function() {
// update panel
}
$(some-input).on("search", function() {
// update panel
}
(Eles são separados porque eu queria verificar quando e sob quais circunstâncias cada um foi chamado).
Acontece que o Chrome e o Firefox reagem de maneira diferente. Em particular, o Firefox trata change
como "todas as alterações na entrada", enquanto o Chrome trata como "quando o foco é perdido E o conteúdo é alterado". Portanto, no Chrome, a função "painel de atualização" foi chamada uma vez, no FF duas vezes para cada pressionamento de tecla (uma em keyup
uma change
)
Além disso, limpar o campo com o pequeno X (que não está presente no FF) disparou o search
evento no Chrome: não keyup
, não change
.
A conclusão? Usarinput
vez disso:
$(some-input).on("input", function() {
// update panel
}
Ele funciona com o mesmo comportamento em todos os navegadores que testei, reagindo a cada alteração no conteúdo de entrada (copiar e colar com o mouse, preenchimento automático e "X" incluídos).
onchange
evento?