Quero adicionar uma resposta "tardia", porque lutei com change, keyupe searchhoje, 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 changecomo "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 keyupuma 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).
onchangeevento?