W3docs

JavaScript eventi change, input, cut, copy, paste

Guida agli eventi JavaScript change, input, cut, copy e paste per gestire moduli web, clipboard e feedback in tempo reale.

Comprendere e implementare la gestione degli eventi JavaScript è fondamentale per creare applicazioni web dinamiche e intuitive. Questo articolo si concentra sugli eventi principali associati agli input dei form e alle interazioni dell'utente: change, input, cut, copy e paste. Padroneggiando questi eventi è possibile migliorare l'esperienza di inserimento dati e fornire feedback immediato nei moduli web.

Questa pagina illustra cosa fa ciascun evento, esattamente quando si attiva, in cosa differiscono change e input, e come leggere e controllare i dati degli appunti — con esempi eseguibili per ciascuno.

change vs input a colpo d'occhio

I due eventi legati al testo sono facilmente confondibili. Si differenziano in quando si attivano:

EventoSi attiva quando…Utilizzo tipico
changeIl valore viene confermato — di solito quando l'elemento perde il focus (per <select>, immediatamente alla selezione; per checkbox/radio, immediatamente al toggle)Validazione finale, salvataggio di un valore
inputOgni modifica al valore — ogni pressione di tasto, incolla o modifica programmatica durante la digitazioneAnteprime in tempo reale, validazione real-time, contatori di caratteri

In breve: input è "mentre si digita"; change è "quando si ha finito."

Utilizzo dell'evento change

L'evento change si attiva quando il valore di un elemento <input> o <textarea> viene modificato e l'elemento successivamente perde il focus (blur). Per un elemento <select>, checkbox o radio button si attiva immediatamente quando la selezione o lo stato di spunta cambia, poiché questi non hanno uno stato di digitazione intermedio da confermare. Questo evento è ideale per eseguire la validazione o altre azioni dopo che l'input dell'utente è stato finalizzato.

Esempio: Monitoraggio dei cambiamenti di 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>

Questo codice fornisce all'utente un avviso immediato alla selezione, indicando il colore scelto.

Sfruttare l'evento input

A differenza dell'evento change, che tipicamente si attiva quando un campo di testo perde il focus, l'evento input si attiva immediatamente a ogni pressione di tasto o modifica del valore, fornendo feedback in tempo reale. Questo è particolarmente utile per validare l'input man mano che viene inserito, ad esempio controllando la forza di una password o mostrando un contatore di caratteri in tempo reale.

L'evento input si attiva anche per gli elementi contenteditable e per le modifiche che non provengono affatto dalla tastiera — incolla, drag-and-drop, compilazione automatica o input vocale. Se è necessario ispezionare o annullare una modifica prima che venga applicata al DOM, è preferibile ascoltare l'evento correlato beforeinput, il cui event.inputType (ad esempio "insertText" o "deleteContentBackward") indica il tipo di modifica che sta per avvenire.

Esempio: Validazione dinamica dell'input

<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>

Questo script aggiorna l'indicatore di forza mentre l'utente digita la propria password.

Gestione degli eventi cut, copy e paste

Gli eventi cut, copy e paste consentono agli sviluppatori di interagire con gli appunti, il che può essere fondamentale per le applicazioni che richiedono una gestione avanzata degli appunti. Si noti che event.clipboardData è ampiamente supportato tra i browser, mentre navigator.clipboard richiede un contesto sicuro (HTTPS) ed è supportato in tutti i browser moderni. Per il supporto dei browser più vecchi, fare affidamento su event.clipboardData o sul legacy document.execCommand('copy').

Esempio: Interazione con gli appunti

<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>

Questo codice fornisce la funzionalità per copiare il testo con un pulsante, dimostra come intercettare e bloccare le azioni degli appunti utilizzando event.preventDefault(), e gestisce l'evento cut per migliorare l'interattività della pagina web.

Lettura e riscrittura del contenuto incollato

Un'esigenza reale comune non è bloccare un'operazione di incolla ma pulirla — ad esempio rimuovere la formattazione o le interruzioni di riga prima che il testo finisca in un campo. Si chiama event.preventDefault() per impedire l'incolla predefinita, si legge il testo grezzo con event.clipboardData.getData('text'), lo si trasforma e si inserisce il valore pulito manualmente:

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') restituisce il payload in testo semplice; è possibile richiedere anche 'text/html' per il contenuto ricco. Poiché i gestori di cut, copy e paste ricevono un ClipboardEvent, espongono clipboardData in modo sincrono — a differenza dell'API asincrona e basata su Promise navigator.clipboard utilizzata nel pulsante di copia sopra.

Conclusione

L'implementazione di eventi JavaScript come change, input, cut, copy e paste non solo migliora l'interattività delle pagine web, ma offre agli utenti un feedback immediato e un'esperienza più coinvolgente. Utilizzare input quando si necessita di un comportamento in tempo reale durante la digitazione; utilizzare change quando interessa solo il valore confermato; e usare gli eventi degli appunti quando è necessario leggere, pulire o controllare le operazioni di copia/incolla. Combinandoli con attenzione, i form risultano reattivi senza sopraffare gli utenti con messaggi di validazione prematuri.

Vedi anche

Esercizio

Pratica
Quali delle seguenti affermazioni sono vere riguardo agli eventi JavaScript 'change', 'input', 'cut', 'copy' e 'paste'?
Quali delle seguenti affermazioni sono vere riguardo agli eventi JavaScript 'change', 'input', 'cut', 'copy' e 'paste'?
Was this page helpful?