Eventos change, input, cut, copy, paste em JavaScript
Aprenda a usar os eventos change, input, cut, copy e paste em JavaScript para criar formulários dinâmicos e interativos em aplicações web.
Compreender e implementar o tratamento de eventos em JavaScript é essencial para criar aplicações web dinâmicas e amigáveis ao usuário. Este artigo se concentra nos principais eventos associados às entradas de formulário e às interações do usuário: change, input, cut, copy e paste. Ao dominar esses eventos, você pode melhorar a experiência de entrada de dados e fornecer feedback imediato em formulários web.
Esta página aborda o que cada evento faz, exatamente quando ele é disparado, como change e input diferem entre si, e como ler e controlar dados da área de transferência — com exemplos executáveis para cada um.
change vs input em resumo
Os dois eventos relacionados a texto são fáceis de confundir. Eles diferem em quando são disparados:
| Evento | Dispara quando… | Uso típico |
|---|---|---|
change | O valor é confirmado — geralmente quando o elemento perde o foco (para <select>, imediatamente na seleção; para checkbox/radio, imediatamente na alternância) | Validação final, salvar um valor |
input | Cada modificação de valor — cada tecla pressionada, colagem ou alteração programática durante a edição | Pré-visualizações ao vivo, validação em tempo real, contadores de caracteres |
Em resumo: input é "enquanto você digita"; change é "quando você termina."
Utilizando o Evento change
O evento change é disparado quando o valor de um elemento <input> ou <textarea> é alterado e o elemento subsequentemente perde o foco (blur). Para um elemento <select>, checkbox ou radio button, ele é disparado imediatamente quando a seleção ou o estado marcado muda, pois esses elementos não têm um estado intermediário de digitação a ser confirmado. Esse evento é ideal para realizar validações ou outras ações após a entrada do usuário ser finalizada.
Exemplo: Monitorando Alterações no Select
<select id="colorSelector">
<option value="red">Red</option>
<option value="blue">Blue</option>
<option value="green">Green</option>
</select>
<script>
document.getElementById('colorSelector').addEventListener('change', function(event) {
alert('You selected ' + event.target.value);
});
</script>Este código fornece um alerta imediato ao usuário após a seleção, indicando a cor escolhida.
Aproveitando o Evento input
Ao contrário do evento change, que normalmente é disparado quando um campo de texto perde o foco, o evento input é acionado imediatamente a cada tecla pressionada ou modificação de valor, fornecendo feedback em tempo real. Isso é especialmente útil para validar entradas enquanto são digitadas, como verificar a força de uma senha ou exibir uma contagem de caracteres ao vivo.
O evento input também é disparado para elementos contenteditable e para alterações que não vêm do teclado — colagem, arrastar e soltar, preenchimento automático ou entrada por voz. Se você precisar inspecionar ou cancelar uma edição antes que ela seja aplicada ao DOM, use o evento relacionado beforeinput, cujo event.inputType (por exemplo, "insertText" ou "deleteContentBackward") informa que tipo de edição está prestes a acontecer.
Exemplo: Validação Dinâmica de Entrada
<input type="password" id="passwordInput" placeholder="Enter your password">
<div id="passwordStrength"></div>
<script>
document.getElementById('passwordInput').addEventListener('input', function(event) {
var strength = event.target.value.length;
var strengthMessage = 'Weak';
if(strength > 5) strengthMessage = 'Moderate';
if(strength > 10) strengthMessage = 'Strong';
document.getElementById('passwordStrength').textContent = 'Strength: ' + strengthMessage;
});
</script>Este script atualiza o indicador de força conforme o usuário digita a senha.
Tratando os Eventos cut, copy e paste
Os eventos cut, copy e paste permitem que os desenvolvedores interajam com a área de transferência, o que pode ser essencial para aplicações que exigem gerenciamento avançado da área de transferência. Note que event.clipboardData é amplamente suportado em todos os navegadores, enquanto navigator.clipboard requer um contexto seguro (HTTPS) e é suportado em todos os navegadores modernos. Para suporte a navegadores mais antigos, use event.clipboardData ou o legado document.execCommand('copy').
Exemplo: Interação com a Área de Transferência
<input type="text" id="clipboardInput" value="Copy this text">
<button id="copyBtn">Copy</button>
<script>
document.getElementById('copyBtn').addEventListener('click', async function() {
try {
await navigator.clipboard.writeText(document.getElementById('clipboardInput').value);
alert('Text copied!');
} catch (err) {
console.error('Failed to copy: ', err);
}
});
document.getElementById('clipboardInput').addEventListener('paste', function(event) {
event.preventDefault();
alert('Pasting blocked. Pasted content: ' + event.clipboardData.getData('text'));
});
document.getElementById('clipboardInput').addEventListener('cut', function(event) {
event.preventDefault();
alert('Cutting blocked. Cut content: ' + event.clipboardData.getData('text'));
});
</script>Este código fornece funcionalidade para copiar texto com um botão, demonstra como interceptar e bloquear ações da área de transferência usando event.preventDefault(), e trata o evento cut para aumentar a interatividade da página web.
Lendo e reescrevendo o conteúdo colado
Uma necessidade real comum não é bloquear uma colagem, mas limpá-la — por exemplo, remover formatação ou quebras de linha antes que o texto seja inserido em um campo. Chame event.preventDefault() para interromper a colagem padrão, leia o texto bruto com event.clipboardData.getData('text'), transforme-o e insira o valor limpo você mesmo:
const input = document.getElementById('clean-paste');
input.addEventListener('paste', (event) => {
event.preventDefault();
const pasted = event.clipboardData.getData('text');
// Collapse whitespace/newlines into single spaces
const cleaned = pasted.replace(/\s+/g, ' ').trim();
input.value = cleaned;
});clipboardData.getData('text') retorna o conteúdo em texto simples; você também pode solicitar 'text/html' para conteúdo rico. Como os handlers de cut, copy e paste recebem um ClipboardEvent, eles expõem clipboardData de forma síncrona — ao contrário da API navigator.clipboard assíncrona baseada em Promise usada no botão de cópia acima.
Conclusão
Implementar eventos JavaScript como change, input, cut, copy e paste não só melhora a interatividade das páginas web, mas também fornece feedback imediato aos usuários e uma experiência mais envolvente. Use input quando precisar de comportamento ao vivo, enquanto digita; use change quando se importar apenas com o valor confirmado; e use os eventos de área de transferência quando precisar ler, limpar ou controlar copiar/colar. Combine-os com critério e seus formulários se tornarão responsivos sem sobrecarregar os usuários com mensagens de validação prematuras.
Veja também
- Introdução a eventos de navegador — como os eventos são adicionados e despachados.
- Propriedades e métodos de formulário — lendo e escrevendo valores de formulário.
- Eventos de formulário: submit — tratando o momento em que um formulário é enviado.
- Foco: focus/blur — as mudanças de foco que disparam
change. - Teclado: keydown e keyup — eventos de tecla de nível mais baixo.