DOM event
La taula d'esdeveniments DOM (Document Object Model) mostra els mecanismes crucials que té JavaScript per interactuar amb l'usuari i l'estat del navegador. En lloc de limitar-nos a la taula, ens centrarem en les categories principals d'esdeveniments i destacarem els més importants i d'ús freqüent, amb exemples clars d'ús amb addEventListener().
Esdeveniments de ratolí (Mouse Events)
Aquests són els esdeveniments més comuns per a la interactivitat bàsica.
| Event | Descripció Millorada | Cas d'Ús Destacat |
click |
Es dispara quan es pressiona i es deixa anar ràpidament el botó principal del ratolí sobre un element. | És l'esdeveniment fonamental per a la interacció amb botons, enllaços i elements interactius. |
dblclick |
Es dispara quan l'usuari fa doble clic ràpidament sobre un element. | S'utilitza per activar edicions o obertures ràpides (p. ex., obrir una carpeta). |
mouseover |
El punter del ratolí es mou sobre l'element o sobre qualsevol dels seus fills. | Sovint substituït per mouseenter per millorar el rendiment. |
mouseenter |
El punter del ratolí entra a l'element. No es dispara quan entra als fills. | Ideal per mostrar tooltips o canviar estils quan el ratolí entra a la zona. |
mouseleave |
El punter del ratolí surt de l'element. | Desfer els canvis fets amb mouseenter. |
mousedown / mouseup |
Es disparen quan es pressiona / s'allibera el botó del ratolí. | Útils per implementar funcionalitats de "drag and drop" o per mesurar el temps de retenció del clic. |
Exemple de ratolí (click i mouseenter)
JavaScript
const boto = document.getElementById('meuBoto');
const missatge = document.getElementById('missatge');
// 1. Esdeveniment click
boto.addEventListener('click', () => {
alert('Has clicat el botó!');
});
// 2. Esdeveniment mouseenter
boto.addEventListener('mouseenter', () => {
missatge.textContent = 'Passant el ratolí per sobre...';
});
Esdeveniments de teclat (Keyboard Events)
Essencials per a formularis, dreceres de teclat i jocs.
| Event | Descripció Millorada | Cas d'Ús Destacat |
keydown |
Es dispara quan es pressiona una tecla. Es dispara repetidament si la tecla es manté premuda. | Detecció de dreceres (Ctrl + S), o detecció de tecles no-caràcter (F1, F5). |
keyup |
Es dispara quan s'allibera una tecla. | Finalitzar la detecció d'una drecera o d'una pulsació. |
keypress |
Obsolet/Desaconsellat. Només es disparava quan es premia una tecla que produïa un caràcter (p. ex., 'A', '1', però no 'Majúscules' o 'Alt'). | Usar keydown o input en el seu lloc. |
Exemple de teclat (keydown)
JavaScript
document.addEventListener('keydown', (event) => {
// La propietat 'key' retorna la tecla premuda
if (event.key === 'Enter') {
console.log("Usuari ha pressionat Enter. Enviant formulari...");
// event.preventDefault(); // Evita l'acció per defecte
}
// Per a dreceres:
if (event.ctrlKey && event.key === 'd') {
event.preventDefault(); // Bloqueja el comportament per defecte del navegador
alert("Drecera Ctrl+D activada!");
}
});
Esdeveniments de formulari i entrada (Form & Input Events)
Controlen la interacció amb camps de text, seleccions i l'enviament de dades.
| Event | Descripció Millorada | Cas d'Ús Destacat |
change |
Es dispara quan un element de formulari perd el focus (amb blur) i el seu valor ha estat modificat des de l'últim focus. |
Validació final de camp, o canvi en <select>. |
input |
Es dispara immediatament cada vegada que el valor d'un camp canvia (es prem una tecla, es fa una retallada, etc.). | Validació instantània en temps real, comptadors de caràcters. |
focus / blur |
Es dispara quan un element rep / perd el focus (es fa clic a dins / es fa clic a fora). | Canviar l'estil visual del camp actiu. |
submit |
Es dispara quan s'intenta enviar un <form>. |
Interceptar l'enviament per fer una validació de dades final abans d'enviar-les al servidor. |
Exemple de formulari (input i submit)
JavaScript
const campNom = document.getElementById('nom');
const formulari = document.getElementById('meuForm');
// 1. Esdeveniment input (Validació en temps real)
campNom.addEventListener('input', () => {
if (campNom.value.length < 3) {
console.log("El nom ha de tenir almenys 3 caràcters.");
}
});
// 2. Esdeveniment submit (Validació final)
formulari.addEventListener('submit', (event) => {
if (campNom.value.length === 0) {
event.preventDefault(); // Evita que el formulari s'enviï
alert('El camp Nom és obligatori!');
}
// Si la validació és OK, el formulari s'envia
});
Esdeveniments de finestra i document (Window & Document Events)
Aquests esdeveniments estan relacionats amb l'estat del navegador, l'URL i el procés de càrrega.
| Event | Descripció Millorada | Cas d'Ús Destacat |
load |
Es dispara quan la pàgina sencera (incloent-hi tots els recursos: imatges, scripts, CSS) ha acabat de carregar-se. | Iniciar el codi principal de l'aplicació o inicialitzar scripts de tercers. |
DOMContentLoaded |
Es dispara quan el document HTML ha estat completament carregat i parsejat, sense esperar els estils ni les imatges. | Recomanat per iniciar la lògica JavaScript, ja que és més ràpid que load. |
resize |
Es dispara quan la finestra del navegador canvia de mida. | Adaptar la interfície a resolucions canviants o al gir de la pantalla en mòbils. |
scroll |
Es dispara quan l'usuari fa scroll a l'element o a la finestra. | Implementar càrrega infinita (infinite scroll) o fixar elements (com una capçalera) en una posició. |
popstate |
Es dispara quan l'usuari navega a una entrada de l'historial (clicant Enrere/Endavant) després d'haver utilitzat history.pushState(). |
Essencial per a la gestió de rutes en SPAs (Single Page Applications). |
Exemple de finestra (DOMContentLoaded i resize)
JavaScript
// Millor que 'load' per iniciar el JS
document.addEventListener('DOMContentLoaded', () => {
console.log("L'estructura DOM està llesta.");
// Aquí inicialitzem listeners d'elements que ja existeixen
});
// Adaptació a la pantalla
window.addEventListener('resize', () => {
console.log(`Nova amplada de la finestra: ${window.innerWidth}px`);
// Codi per recalcular la posició d'un mapa o d'un gràfic
});