W3docs

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:

EventoDispara quando…Uso típico
changeO 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
inputCada modificação de valor — cada tecla pressionada, colagem ou alteração programática durante a ediçãoPré-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

Prática

Prática
Quais das seguintes afirmações são verdadeiras sobre os eventos JavaScript 'change', 'input', 'cut', 'copy' e 'paste'?
Quais das seguintes afirmações são verdadeiras sobre os eventos JavaScript 'change', 'input', 'cut', 'copy' e 'paste'?
Was this page helpful?