Javascript fondamentaux
Thème :
Intermédiaire
1 vues ·7/19 leçons

DOM, Événements

2.1 Le DOM - Sélectionner et Modifier

Qu’est-ce que le DOM ?

Le DOM (Document Object Model) représente la page HTML sous forme d’objets JavaScript qu’on peut manipuler.

// Accès aux parties principales
document.documentElement; // <html>
document.head; // <head>
document.body; // <body>

Sélectionner des éléments

// Par ID
const element = document.getElementById('monId');

// Par sélecteur CSS (le plus utile)
const titre = document.querySelector('h1'); // Premier h1
const tousLesP = document.querySelectorAll('p'); // Tous les <p>

// Sélecteurs avancés
document.querySelector('.container > button'); // Premier bouton enfant
document.querySelectorAll('button:not([disabled])'); // Boutons actifs

Créer et ajouter des éléments

addEventListener() est une méthode qui permet d’attacher un écouteur d’événement à un élément DOM. Elle écoute les actions de l’utilisateur (clic, survol, saisie, etc.) et exécute une fonction en réponse.


Syntaxe générale

element.addEventListener(type, callback, options);

Détail des paramètres : ('click', (event)

1️⃣ Premier paramètre : 'click' (Type d’événement)

C’est une chaîne de caractères qui spécifie quel événement écouter.

Exemples d’événements courants :

Événement Description
'click' Clic de la souris
'dblclick' Double-clic
'mouseover' Survol de la souris
'mouseout' Sortie de la souris
'keydown' Touche enfoncée
'keyup' Touche relâchée
'input' Saisie dans un champ
'submit' Soumission d’un formulaire
'change' Changement de valeur
'focus' Élément reçoit le focus
'blur' Élément perd le focus

Exemple :

// Écouter un double-clic
bouton.addEventListener('dblclick', () => {
    console.log('Double-clic détecté !');
});

2️⃣ Deuxième paramètre : (event) (Fonction de rappel)

C’est la fonction qui s’exécute quand l’événement se produit. Elle reçoit automatiquement un objet event contenant les informations sur l’événement.

Structure de la fonction callback :

bouton.addEventListener('click', (event) => {
    // event est l'objet événement
    // Votre code ici
});

Propriétés principales de l’objet event :

Propriété Description Exemple
event.target L’élément qui a déclenché l’événement <button>Cliquez-moi</button>
event.type Le type d’événement 'click'
event.clientX Position X de la souris 245
event.clientY Position Y de la souris 120
event.key La touche pressée (pour keydown/keyup) 'Enter'
event.preventDefault() Annule l’action par défaut Empêche la soumission d’un formulaire
event.stopPropagation() Arrête la propagation de l’événement Évite que l’événement remonte aux parents

Exemple détaillé avec event

const bouton = document.querySelector('button');

bouton.addEventListener('click', (event) => {
    // event.target : l'élément cliqué
    console.log('Élément cliqué :', event.target);
    // Résultat : <button>Cliquez-moi</button>

    // event.type : le type d'événement
    console.log("Type d'événement :", event.type);
    // Résultat : 'click'

    // event.clientX et event.clientY : position de la souris
    console.log('Position X :', event.clientX);
    console.log('Position Y :', event.clientY);

    // Accéder au texte du bouton
    console.log('Texte du bouton :', event.target.textContent);
});

Troisième paramètre : Options avancées

bouton.addEventListener(
    'click',
    (event) => {
        console.log('Bouton cliqué !');
    },
    { once: true },
); // Options

Options disponibles :

Option Type Description
once Boolean Si true, l’écouteur s’exécute une seule fois, puis se supprime
capture Boolean Si true, capture l’événement en phase de capture (au lieu de la phase de bubbling)
passive Boolean Si true, indique que le listener ne appellera jamais preventDefault()

Exemples :

// Exécuter une seule fois
bouton.addEventListener(
    'click',
    () => {
        console.log("Ceci s'affiche une seule fois");
    },
    { once: true },
);

// Avec capture
bouton.addEventListener(
    'click',
    () => {
        console.log('Phase de capture');
    },
    { capture: true },
);

// Plusieurs options
bouton.addEventListener(
    'click',
    () => {
        console.log('Une seule fois, en capture');
    },
    { once: true, capture: true },
);

Comparaison : Syntaxe simple vs avancée

Syntaxe simple (sans event)

bouton.addEventListener('click', () => {
    console.log('Bouton cliqué !');
});

✅ Suffisant quand on n’a pas besoin d’informations sur l’événement


Syntaxe avancée (avec event)

bouton.addEventListener(
    'click',
    (event) => {
        console.log('Cible :', event.target);
        console.log('Type :', event.type);
    },
    { once: true },
);

✅ Utile quand on a besoin d’accéder aux propriétés de l’événement


Cas d’usage pratiques

1. Valider un formulaire

const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault(); // Empêche l'envoi par défaut
    console.log('Formulaire soumis !');
    // Votre logique de validation
});

2. Récupérer la position de la souris

document.addEventListener('mousemove', (event) => {
    console.log(`X: ${event.clientX}, Y: ${event.clientY}`);
});

3. Détecter une touche spécifique

document.addEventListener('keydown', (event) => {
    if (event.key === 'Enter') {
        console.log('Touche Entrée pressée !');
    }
});

4. Bouton cliquable une seule fois

const btnUnique = document.querySelector('.btn-unique');

btnUnique.addEventListener(
    'click',
    (event) => {
        console.log('Vous avez cliqué !');
        event.target.disabled = true; // Désactiver le bouton
    },
    { once: true },
);

Résumé

Élément Rôle
'click' Type d’événement à écouter
(event) Paramètre contenant les infos de l’événement
event.target L’élément qui a déclenché l’événement
event.type Le type d’événement (ex: ‘click’)
{ once: true } Exécute une seule fois
// Créer un nouvel élément
const div = document.createElement('div');
div.textContent = 'Bonjour !';
div.className = 'ma-classe';
div.id = 'mon-id';

// Ajouter au DOM
document.body.appendChild(div);

// Ajouter du HTML
div.innerHTML = '<p>Contenu HTML</p>';

// Ajouter avant un élément
const reference = document.querySelector('.reference');
reference.parentNode.insertBefore(div, reference);

Modifier et supprimer

// Modifier le texte
const titre = document.querySelector('h1');
titre.textContent = 'Nouveau titre';

// Modifier les styles
titre.style.color = 'blue';
titre.style.fontSize = '24px';

// Ajouter/retirer des classes
titre.classList.add('active');
titre.classList.remove('inactive');
titre.classList.toggle('highlight');

// Vérifier une classe
if (titre.classList.contains('active')) {
    console.log('Le titre est actif');
}

// Supprimer un élément
titre.remove();

Attributs et propriétés

const lien = document.querySelector('a');

// Lire un attribut
const href = lien.getAttribute('href');

// Modifier un attribut
lien.setAttribute('href', 'https://example.com');
lien.setAttribute('target', '_blank');

// Supprimer un attribut
lien.removeAttribute('disabled');

// Vérifier un attribut
if (lien.hasAttribute('disabled')) {
    console.log('Le lien est désactivé');
}

// Attributs de données (data-*)
const element = document.querySelector('[data-id]');
console.log(element.dataset.id); // Lire data-id
element.dataset.status = 'actif'; // Modifier data-status

2.2 Événements - Écouter les Actions

Ajouter des écouteurs d’événements

const bouton = document.querySelector('button');

// Syntaxe simple
bouton.addEventListener('click', () => {
    console.log('Bouton cliqué !');
});

// Avec paramètres avancés
bouton.addEventListener(
    'click',
    (event) => {
        console.log('Cible :', event.target);
        console.log('Type :', event.type);
    },
    { once: true },
); // Exécuter une seule fois

Exemple : Formulaire interactif

const input = document.querySelector('input[type="text"]');
const bouton = document.querySelector('button');

// Événement input : à chaque caractère
input.addEventListener('input', (event) => {
    console.log('Valeur actuelle :', event.target.value);
});

// Événement keydown : touche enfoncée
input.addEventListener('keydown', (event) => {
    if (event.key === 'Enter') {
        console.log('Entrée pressée');
    }
});

// Événement submit : formulaire soumis
document.querySelector('form').addEventListener('submit', (event) => {
    event.preventDefault(); // Empêcher le rechargement
    console.log('Formulaire soumis');
});

🎯 Points clés à retenir

Concept Utilité
querySelector Sélectionner des éléments avec CSS
addEventListener Écouter les événements

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur DOM, Événements. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.