Qual é a diferença entre o atributo onBlur e onChange em HTML?

117

Quando um é chamado em relação ao outro? Existe uma situação em que onChange seria chamado, mas onBlur não seria?

pacman
fonte

Respostas:

171

O onBlurevento é disparado quando você se afasta de um objeto sem necessariamente ter alterado seu valor.

O onChangeevento só é chamado quando você altera o valor do campo e ele perde o foco.

Você pode querer dar uma olhada na introdução aos eventos do quirksmode . Este é um ótimo lugar para obter informações sobre o que está acontecendo em seu navegador quando você interage com ele. Seu livro também é bom.

Mark Dickinson
fonte
2
seu link sobre quirksmode não fala sobre desfoque, apenas eventos básicos
stackdave
23

onblur dispara quando um campo perde o foco, enquanto onchange dispara quando o valor desse campo muda. Esses eventos nem sempre ocorrerão na mesma ordem, no entanto.

No Firefox, a tabulação de um campo alterado irá disparar onchange e depois onblur, e normalmente fará o mesmo no IE. No entanto, se você pressionar a tecla enter em vez de tab, no Firefox ele irá disparar onblur e depois onchange, enquanto o IE geralmente dispara na ordem original. No entanto, já vi casos em que o IE também dispara o desfoque primeiro, então tome cuidado. Você não pode presumir que o onblur ou o onchange acontecerão antes do outro.


fonte
10

Um exemplo para tornar as coisas concretas. Se você tiver uma seleção assim:

<select onchange="" onblur="">
  <option>....
</select>

o onblur()é chamado quando você navega para fora. O onchange()é chamado quando você seleciona uma opção diferente da seleção - ou seja, você altera o que está selecionado atualmente.

Brian Agnew
fonte
1
Outro exemplo: em entradas do tipo number, clicar nas setas para cima / para baixo disparará um evento de mudança (mas não um evento de desfoque), enquanto a digitação só causa um evento de mudança quando o campo perde o foco.
Chris Middleton
7

No Firefox, o onchange dispara apenas quando você usa a tecla Tab ou clica fora do campo de entrada. O mesmo é verdade para Onblur. A diferença é que o onblur disparará independentemente de você ter alterado alguma coisa no campo ou não. É possível que o ENTER dispare um ou ambos, mas você não saberia disso se desativar o ENTER em seus formulários para evitar submissões inesperadas.

Betty Mock
fonte
4

onBlur é quando seu foco não está mais no campo em questão.

A propriedade onblur retorna o código do manipulador de eventos onBlur, se houver, que existe no elemento atual.

onChange é quando o valor do campo muda.

Ólafur Waage
fonte
4

Acho importante observar aqui que onBlur () dispara independentemente.

Este é um tópico útil, mas a única coisa que não esclarece é que onBlur () irá disparar todas as vezes.

onChange () só disparará quando o valor for alterado.

php-b-grader
fonte
3

onChange é quando algo dentro de um campo muda, por exemplo, você escreve algo em uma entrada de texto.

onBlur é quando você tira o foco de um campo, por exemplo, você estava escrevendo uma entrada de texto e clicou fora dela.

Na verdade, eles são quase a mesma coisa, mas para onChange se comportar da maneira que onBlur faz algo nessa entrada precisa ser alterado.

Sam152
fonte