Javascript Part 2
Javascript Part 2
bonjour: function(){
alert('Bonjour, je suis ' + [Link] + ', j\'ai ' + [Link] + ' ans');
}
};
On accède aux propriétés "nom" et "age" de "amina" et on affiche leur
valeur dans deux paragraphes p id='p1' et p id='p2'.
[Link]('p1').innerHTML = 'Nom : ' + [Link];
[Link]('p2').innerHTML = 'Age : ' + [Link];
A noter : "document" est en fait aussi un objet, getElementById() une
méthode et innerHTML une propriété de l'API "DOM"!
On modifie la valeur de la propriété "age" de "amina"
[Link] = 30;
On accède à la méthode "bonjour" de l'objet "amina" qu'on exécute de
la même façon qu'une fonction anonyme stockée dans une variable
[Link]();
Création avec le constructeur Object
let amina = new Object();
[Link]='sory',
[Link]='amina',
[Link]=29,
[Link]='[Link]@[Link]',
[Link] =function(){
alert('Bonjour, je suis ' + [Link] + ', j\'ai ' + [Link] + ' ans');
}
Création à l’aide d’un constructeur personnalisé
function personne(nom, prenom, age, mail)
{
[Link]=nom;
[Link]=prenom;
[Link]=age;
;[Link]=mail;
[Link]= function(){
alert('Bonjour, je suis ' + [Link] + ', j\'ai ' + [Link] + ' ans');
};
}
amina=new personne('sory','amina',29,'[Link]@[Link]');
On ne peut pas ajouter une nouvelle propriété à un constructeur d'objets
existant.
function personne(nom, prenom, age, mail)
{
[Link]=nom;
[Link]=prenom;
[Link]=age;
[Link]=mail;
[Link]= function(){
alert('Bonjour, je suis ' + [Link] + ', j\'ai ' + [Link] + ' ans');
};
}
amina=new personne('sory','amina',29,'[Link]@[Link]');
[Link]='maroc';
[Link]('p1').innerHTML = 'Nom : ' + [Link];;
[Link]('p4').innerHTML = 'nationalité : ' + [Link];
Pour qu’on puisse ajouter une propriété on a deux possibilités:
L’ajouter à l’intérieur de la fonction constucteur:
function personne(nom, prenom, age, mail)
{
[Link]=nom;
[Link]=prenom;
[Link]=age;
[Link]=mail;
[Link]='maroc';
[Link]= function(){
alert('Bonjour, je suis ' + [Link] + ', j\'ai ' + [Link] + ' ans');
};
}
Utiliser la propriété prototype : [Link]é='maroc'
Boucler sur un objet
Boucle for …in
for (key in object) {
// code block to be executed
}
let text = "";
for (let x in amina) {
text += amina[x]+'<br>';
}
[Link]('p1').innerHTML = text;
Depuis ES6, JavaScript introduit la syntaxe des classes pour simplifier la
création d’objets.
class Personne {
constructor(nom, age) {
[Link] = nom;
[Link] = age; }
sePresenter() {
alert(`Je m'appelle ${[Link]} et j'ai ${[Link]} ans.`);
}
}
let pierre = new Personne("Pierre", 30); [Link](); // Je
m'appelle Pierre et j'ai 30 ans.
Héritage avec extends et super
Une classe peut hériter d’une autre
class Employe extends Personne {
constructor(nom, age, poste) {
super(nom, age);
[Link] = poste;
}
travailler() {
alert(`${[Link]} travaille en tant que ${[Link]}.`);
}
}
let employe1 = new Employe("Marie", 28, "Développeuse");
[Link](); // Marie travaille en tant que Développeuse.
Les tableaux
• Les tableaux en JavaScript sont des objets spéciaux permettant de
stocker des collections de valeurs. Ils sont très puissants et largement
utilisés en programmation.
• chaque élément du tableau est identifié par un index, qui commence
toujours à 0.
• Pour créer un tableau on utilise soit la notation [ ], soit le constructeur
Array.
let fruits = ["Pomme", "Banane", "Orange"];
let fruits= new Array("Pomme", "Banane", "Orange" );
alert(fruits[0]); // Pomme
alert(fruits[1]); // Banane
alert([Link]); // 3
Parcourir un tableau
Boucle for classique
let nombres = [10, 20, 30];
let x=''
for (let i = 0; i < [Link]; i++)
{ x+=nombres[i]+' '; }
[Link]('p1').innerHTML = x;
La boucle for … of (ES6)
for(let num of nombres)
{ x+=num+' '; }
forEach : la méthode la plus utilisée
<script>
let months=new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
text=''
[Link](function(month, index, array) {
text+=[Link]()+'<br>';
});
[Link]('p1').innerHTML = text;
</script>
Dans le code ci-déssus, forEach parcours le tableau et applique la fontion
anonyme à chacun de ces éléments. La fonction permet de stocker dans la
chaine de caractères text les noms des mois en majuscule
Les tableaux
• Les tableaux en JavaScript sont des objets spéciaux permettant de
stocker des collections de valeurs. Ils sont très puissants et largement
utilisés en programmation.
• chaque élément du tableau est identifié par un index, qui commence
toujours à 0.
• Pour créer un tableau on utilise soit la notation [ ], soit le constructeur
Array.
let fruits = ["Pomme", "Banane", "Orange"];
let fruits= new Array("Pomme", "Banane", "Orange" );
alert(fruits[0]); // Pomme
alert(fruits[1]); // Banane
alert([Link]); // 3
Parcourir un tableau
Boucle for classique
let nombres = [10, 20, 30];
let x=''
for (let i = 0; i < [Link]; i++)
{ x+=nombres[i]+' '; }
[Link]('p1').innerHTML = x;
La boucle for … of (ES6)
for(let num of nombres)
{ x+=num+' '; }
forEach : la méthode la plus utilisée
<script>
let months=new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
text=''
[Link](function(month, index, array) {
text+=[Link]()+'<br>';
});
[Link]('p1').innerHTML = text;
</script>
Dans le code ci-déssus, forEach parcours le tableau et applique la fontion
anonyme à chacun de ces éléments. La fonction permet de stocker dans la
chaine de caractères text les noms des mois en majuscule
Modification d’un tableau
let fruits = ["pomme", "banane"];
Ajouter, Supprimer des éléments à la fin
push() : Ajoute à la fin.
[Link]("raisin", "orange");
[Link](fruits); // ["pomme", "banane", "raisin", "orange"]
pop() : Supprime le dernier élément
let dernier = [Link]();
[Link](dernier); // "orange"
[Link](fruits); // ["pomme", "banane", "raisin"]
Ajouter, Supprimer des éléments au début
unshift() : Ajoute au début
[Link]("pastèque");
[Link](fruits); // ["pastèque", "pomme", "banane", "raisin"]
shift() : Supprime le premier élément.
let premier = [Link]();
[Link](premier); // "pastèque«
[Link](fruits); // ["pomme", "banane", "raisin"]
splice() : Ajouter, supprime ou remplace des éléments
[Link](1, 1, "orange"); // Supprime 1 élément à l'index 1 et ajoute
"orange")
[Link](fruits); // ["pomme", "orange" ,"raisin"]
Accéder et rechercher des éléments dans un tableaux
indexOf() : Renvoie l'index de la première occurrence d'un élément (ou -1 s'il
n'existe pas).
[Link]([Link]("orange")); // 1
includes() : Retourne true si l'élément est trouvé dans le tableau
[Link]([Link]("pomme")); // true
[Link]([Link]("ananas")); // false
find() : Retourne le premier élément qui satisfait la condition
let nombres = [10, 25, 30, 45];
let grandNombre = [Link](num => num > 20);
[Link](grandNombre); // 25
findIndex() : Trouver l'index selon une condition
let index = [Link](num => num > 20);
[Link](index); // 1
slice() : Extraire une portion du tableau
let partie = [Link](1, 3); // De l'index 1 à 2 (3 non inclus)
[Link](partie); // [25, 30]
Autres méthodes utiles
sort() : Trier un tableau
let chiffres = [5, 2, 8, 1, 3];
[Link]();
[Link](chiffres); // [1, 2, 3, 5, 8]
reverse() : Inverser l'ordre
[Link]();
[Link](chiffres); // [8, 5, 3, 2, 1]
join() : Convertir en chaîne
[Link]([Link](" - ")); // "pomme - orange - raisin"
split() : Convertir une chaîne en tableau
let texte = "Bonjour, monde!";
let mots = [Link](" ");
[Link](mots); // ["Bonjour,", "monde!"]
Transformation d’un tableau
map() : La méthode map() permet de transformer chaque élément d'un
tableau et de retourner un nouveau tableau avec les éléments modifiés.
[Link]((element, index, array) => {
return nouvelleValeur;
});
split()
Divise une chaîne en fonction d’une expression régulière.
let data = "Jean,Paul,Marie";
[Link]([Link](/,/)); // ["Jean", "Paul", "Marie"]
let text = "déve1lopp2eur";
[Link]([Link](/[0-9]/)); //['déve', 'lopp', 'eur']
[Link]([Link](//));//erreur
[Link]([Link](/ /));//['déve1lopp2eur']
Chapitre 5 :Manipulation du DOM
[Link](elements).forEach(function(nom, index) {
[Link] = 'blue';
});
OU utiliser l'opérateur de décomposition [...] :
let elements = [Link]("bleu");
[...elements].forEach(function(nom, index) {
[Link] = 'blue';
});
On peut utiliser la boucle for
for (let element of elements) {
[Link] = "blue";
}
Accéder à un élément en fonction de son identité
getElementsByTagName() permet de sélectionner des éléments en
fonction de leur nom et renvoie un objet HTMLCollection qui consiste en
une liste d’éléments correspondant au nom de balise passé en argument.
Lorsqu’on utilise getElementsByTagName() avec un objet Document, la
recherche se fait dans tout le document tandis que lorsqu’on utilise
getElementsByTagName() avec un objet Element, la recherche se fera
dans l’élément en question seulement
Accéder à un élément en fonction de son attribut name
getElementsByName() renvoie un objet NodeList contenant la liste des
éléments portant un attribut name avec la valeur spécifiée en argument.
On va pouvoir utiliser cette méthode pour sélectionner des éléments de
formulaire par exemple.
Accéder directement à des éléments particuliers avec les propriétés de Document
Finalement, l’interface Document fournit également des propriétés qui vont nous permettre
d’accéder directement à certains éléments ou qui vont retourner des objets contenant des listes
d’éléments. Les plus intéressant ici sont les suivantes :
La propriété body qui retourne le nœud représentant l’élément body ;
La propriété head qui retourne le nœud représentant l’élément head ;
La propriété links qui retourne une liste de tous les éléments a ou area possédant un href avec
une valeur ;
La propriété title qui retourne le titre (le contenu de l’élément title) du document ou permet de
le redéfinir ;
La propriété url qui renvoie l’URL du document sous forme de chaine de caractères ;
La propriété scripts qui retourne une liste de tous les éléments script du document ;
La propriété cookie qui retourne la liste de tous les cookies associés au document sous forme
de chaine de caractères ou qui permet de définir un nouveau cookie.
//Sélectionne l'élément body et applique une couleur bleu
[Link] = 'blue';
//Modifie le texte de l'élément title
[Link]= 'Le Document Object Model';
Naviguer ou se déplacer dans le DOM en JavaScript grâce aux nœuds
Dans de nombreux cas, nous n’allons pas pouvoir accéder directement à un
élément car nous ne disposerons pas de moyen de le cibler. Dans cette
situation, il va être nécessaire de savoir comment naviguer dans le DOM,
pour atteindre celui qui nous intéresse.
Accéder au parent ou à la liste des enfants d’un nœud
parentNode : cette propriété renvoie le parent du nœud spécifié dans
l’arborescence du DOM ou null si le nœud ne possède pas de parent.
childNodes : cette propriété renvoie une liste des nœuds enfants de
l’élément donné.
children : est utilisée si on ne souhaite récupérer que les nœuds enfants
éléments,
parentElement : permet d’accéder au parent s’il s’agit d’un nœud Element
ou null sinon.
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
</head>
<body>
<h1>Titre principal</h1>
<p id='p1'>Un paragraphe <span>avec un span</span></p>
<div>
<p id='p2'>Un paragraphe dans le div</p>
<p>Un autre paragraphe dans le div</p>
</div>
<p>Un autre paragraphe</p>
</body>
<script>
let p1 = [Link]('p1');
let p2 = [Link]('p2');
[Link] = 'RGBa(240,160,000,0.5)'; //Orange
</script>
</html>
<script>
let p1 = [Link]('p1');
let p2 = [Link]('p2');
[Link] =
'RGBa(240,160,000,0.5)'; //Orange
let enfantsP1 = [Link];
enfantsP1[1].[Link] = 'bold';
let enfantsEltP1 = [Link];
enfantsEltP1[0].[Link] = 'underline';
</script>
Accéder à un nœud enfant en particulier à partir d’un nœud parent
firstChild : cette propriété de l’interface renvoie le premier nœud enfant direct d’un certain nœud ou null s’il
n’en a pas.
lastChild : cette propriété au contraire, renvoie le dernier nœud enfant direct d’un certain nœud ou null s’il n’en
a pas.
firstElementChild : permet de renvoyer le premier nœud enfant de type élément seulement d’un certain nœud
lastElementChild : permet de renvoyer le dernier nœud enfant de type élément seulement d’un certain nœud
On ajoute au fichier .html précédent le script suivant:
<script>
let bodyFirstChild = [Link];
let bodyLastChild = [Link];
let bodyFirstElementChild = [Link];
let bodyLastElementChild = [Link];
alert(
'Premier noeud enfant de body : ' + bodyFirstChild +
'\nPremier noeud enfant élément de body : ' + bodyFirstElementChild +
'\nDernier noeud enfant de body : ' + bodyLastChild +
'\nDernier noeud enfant élément de body : ' + bodyLastElementChild
);</script>
Accéder au nœud précédent ou suivant un nœud dans l’architecture
DOM
previousSibling : cette propriété de l’interface renvoie le nœud précédent un certain nœud
dans l’arborescence du DOM (en ne tenant compte que des nœuds de même niveau) ou
null si le nœud en question est le premier.
nextSibling : cette propriété, au contraire, renvoie elle le nœud suivant un certain nœud
dans l’arborescence du DOM (en ne tenant compte que des nœuds de même niveau) ou
null si le nœud en question est le dernier.
<script>
let b = [Link];
let newP = [Link]('p');
let newTexte = [Link]('Texte écrit en JavaScript');
[Link] = 'Paragraphe créé et inséré grâce au JavaScript';
//Ajoute le paragraphe créé comme premier enfant de l'élément body
[Link](newP);
//Ajoute le texte créé comme dernier enfant de l'élément body
[Link](newTexte);
</script>
appendChild() : permet d’ajouter un nœud en tant que dernier
enfant d’un nœud parent.
Les différences entre append() et appendChild() sont les suivantes :
La méthode append() permet également d’ajouter directement
une chaine de caractères tandis que appendChild() n’accepte que
des objets de type Node ;
La méthode append() peut ajouter plusieurs nœuds et chaines de
caractères au contraire de appendChild() qui ne peut ajouter
qu’un nœud à la fois ;
La méthode append() n’a pas de valeur de retour, tandis que
appendChild() retourne l’objet ajouté
let b = [Link];
let newP = [Link]('p');
let newTexte = [Link]('Texte inséré avec appendChild()');
[Link] = 'Paragraphe créé et inséré grâce au JavaScript';
//Ceci fonctionne
[Link](newP, 'Texte inséré avec append()');
//Ceci fonctionne
[Link](newTexte);
//Ceci ne fonctionne pas : [Link]('Texte écrit en JavaScript');
//Ceci ne fonctionne pas non plus : [Link](newP, newTexte);
insertBefore() : permet pour sa part d’insérer un nœud en tant qu’enfant d’un autre
nœud juste avant un certain nœud enfant donné de ce parent.
Cette méthode va prendre en arguments le nœud à insérer et le nœud de référence
<script>
let b = [Link];
let p1 = [Link]('p1');
let newP = [Link]('p');
[Link] = 'Paragraphe créé et inséré grâce au JavaScript';
[Link](newP,p1);
</script>
D’autres methodes peuvent être utilisées
insertAdjacentElement() insère un nœud élément à une position donnée par rapport à
l’élément sur lequel il est appelé.
insertAdjacentText() insère un nœud texte à une position donnée par rapport à
l’élément sur lequel il est appelé.
insertAdjacentHTML() analyse une chaine de caractères en tant que HTML et insère
les nœuds créés avec le balisage donné dans le DOM à une certaine position spécifiée.
Pour chacune de ces trois méthodes, nous allons devoir spécifier la position où on
souhaite insérer nos nœuds ainsi que le nœud à insérer en arguments. Pour la position, il
faudra fournir l’un des mots clefs suivants :
beforebegin : Insère le ou les nœuds avant l’élément ;
afterbegin : Insère le ou les nœuds avant le premier enfant de l’élément ;
beforeend : Insère le ou les nœuds après le dernier enfant de l’élément ;
afterend : Insère le ou les nœuds après l’élément.
<script>
let b = [Link];
let p1 = [Link]('p1');
let p2 = [Link]('p2');
let newP = [Link]('p');
let htmlContent = '<strong> et du texte important</strong>';
[Link] = 'Paragraphe créé et inséré grâce au JavaScript';
//Ajoute un paragraphe après p1
[Link]('afterend', newP);
//Ajoute le contenu de htmlContent avant la balise fermante de p1
[Link]('beforeend', htmlContent);
//Ajoute du texte après la balise ouvrante de p2
[Link]('afterbegin', 'Texte ajouté dans ');
</script>
Déplacer un nœud dans le DOM
Pour déplacer un nœud dans le DOM, on peut utiliser l’une des méthodes
appendChild() ou insertBefore() en leur passant en argument un nœud qui existe déjà
et qui est déjà placé dans le DOM.
Dans ce cas-là, les méthodes vont déplacer le nœud dans le DOM vers la nouvelle
position indiquée.
<script>
let b = [Link];
let p1 = [Link]('p1');
//On accède au dernier élément (le script)
let p4 = [Link];
//On déplace p1 juste avant p4 dans le DOM
[Link](p1, p4);
</script>
Cloner ou remplacer un nœud dans le DOM
cloneNode() : permet de cloner un nœud en renvoyant une copie du nœud
sur lequel elle a été appelée. Cette méthode prend un booléen en argument.
Si la valeur passée est true, les enfants du nœud seront également clonés. Si
on lui passe false, en revanche, seul le nœud spécifié sera cloné.
Par défaut, cette méthode copie également le contenu du nœud copiée.
replaceChild() : permet de remplacer un nœud, par un autre.
Cette méthode va prendre en arguments le nœud de remplacement et le
nœud qui doit être remplacé. Notez que si le nœud de remplacement existé
déjà dans le DOM, il sera d’abord retiré de son emplacement d’origine.
<script>
let b = [Link];
let p1 = [Link]('p1');
let p2 = [Link]('p2');
let p4 = [Link]('p4') ;//On accède au quatrième paragraphe
let newP = [Link]('p'); //On crée un nouveau paragraphe
[Link] = 'Paragraphe créé et inséré grâce au JavaScript';
//On clone p1 et on insère le clone après p2
let cloneP1 = [Link](true);
[Link]('afterend', cloneP1);
//On remplace p4 par newP
[Link](newP, p4);
</script>
Supprimer un nœud du DOM
removeChild() : permet de supprimer un nœud enfant passé en argument d’un certain
nœud parent de l’arborescence du DOM. Cette méthode retournele nœud retiré.
remove() : permet tout simplement de retirer un nœud de l’arborescence du DOM
let b = [Link];
let p1 = [Link]('p1');
let p2 = [Link]('p2');
//Supprime p1 du DOM et renvoie le noeud supprimé
let eltDel = [Link](p1);
//Supprime p2 du DOM
[Link]()
[Link]('Noeud supprimé du DOM : ' + eltDel + '\nContenu : '
+ [Link]);
Manipuler les attributs, les styles et le contenu des éléments
Tester la présence d’attributs
hasAttribute() : permet de tester la présence d’un attribut particulier pour un élément. Cette
méthode prend en argument le nom de l’attribut qu’on recherche et renvoie true si l’élément
possède bien cet attribut ou false sinon.
hasAttributes() : permet de vérifier si un élément possède des attributs ou pas. Cette
méthode retourne true si l’élément possède au moins un attribut ou false si l’élément ne
possède pas d’attribut.
getAttribute() : permet de récupérer la valeur d’un attribut donné pour un élément.
Cette méthode renvoie la valeur de l’attribut donné si celui-ci existe ou null ou la
chaine de caractères vide dans le cas contraire.
setAttribute() : ajoute ou modifie l’attribut class de l’élément avec l’ID monBouton.
getAttributeNames() permet récupérer que les noms des attributs d’un élément sous forme
de tableau (type Array).
removeAttribute() : permet de supprimer un attribut d’un élément,. Cette méthode va
prendre en argument le nom de l’attribut à supprimer.
<body>
<h1>Titre principal</h1>
<p id='p1' class='blue'>Un paragraphe <span>avec un span</span></p>
<div>
<p id='p2'>Un paragraphe dans le div</p>
<p>Un autre paragraphe dans le div</p>
</div>
<p>Un autre paragraphe</p>
<p id='vide'></p>
<script>
let p1 = [Link]('p');
let vide = [Link]('vide');
//Si p1 possède des attributs, hasAttributes() renvoie true
if([Link]()){
[Link] = 'p1 possède des attributs';
}
//Si p1 possède un attribut id, hasAttribute() renvoie true
if([Link]('id')){
[Link] += ' dont un attribut id';
}
</script>
Modifier les styles d’un élément
La propriété style de HTMLElement va nous permettre de définir les styles en ligne d’un
élément.
<script>
let p1 = [Link]('p');
let p2 = [Link]('p2');
[Link] = 'crimson'; //Nuance de rouge
[Link] = '20px';
[Link] = 'orange';
</script>
Modification du contenu d’un élément HTML
innerHTML : cette propriété permet de modifie le HTML interne d’un élément.
innerText : permet de modifie le texte visible d’un élément, sans interpréter le HTML.
textContent : Semblable à innerText
<body>
<h1>Titre principal</h1>
<p id="p1"></p>
<p id="p2"></p>
<div id="demo">Texte initial</div>
<script>
let element = [Link]("demo");
let p1=[Link]("p1");
let p2=[Link]("p2");
[Link] = "<em>Nouveau</em> contenu de P1";
[Link] = "<em>Nouveau</em> contenu"; // Affiche les balises
[Link] = "<em>Nouveau</em> contenu"; // Pareil ici
</script>
</body>
La gestion d’évènements en JavaScript
Un évènement est provoque par une action de l'utilisateur ou du navigateur
lui-même. Les évènements ont des noms tels que click, load et mouseover.
Une fonction appelée en réponse a un événement se nomme un écouteur
(event handler ou event listener). Souvent, leur nom commence par on
comme par exemple onclik ou onload.
Associer des écouteurs aux événements possibles peut se faire de trois
manières différentes:
• On peut utiliser des attributs HTML de type évènement;
• On peut utiliser des propriétés JavaScript liées aux évènements ;
• On peut utiliser la méthode addEventListener() (recommandé).
Liste des événements
click : Cliquer (appuyer puis relâcher) sur l'élément
dblclick : Double-cliquer sur l'élément
mouseover : Faire entrer le curseur sur l'élément
mouseout : Faire sortir le curseur de l'élément
mousedown : Appuyer (sans relâcher) sur le bouton gauche de la souris sur l'élément
mouseup : Relâcher le bouton gauche de la souris sur l'élément
mousemove : Faire déplacer le curseur sur l'élément
keydown : Appuyer (sans relâcher) sur une touche de clavier sur l'élément
keyup : Relâcher une touche de clavier sur l'élément
keypress : Frapper (appuyer puis relâcher) une touche de clavier sur l'élément
focus : Cibler l'élément
blur : Annuler le ciblage de l'élément
change : Changer la valeur d'un élément spécifique aux formulaires (input,
checkbox, etc.)
select : Sélectionner le contenu d'un champ de texte (input, textarea, etc.)
Deux événements spécifiques à <form> :
submit : Envoyer le formulaire
reset : Réinitialiser le formulaire
Utiliser les attributs HTML pour gérer un évènement
Ces attributs HTML de « type évènement » possèdent souvent le nom de
l’évènement qu’ils doivent écouter et gérer précédé par « on » comme
onclick par exemple :
<body>
<h1>Titre principal</h1>
<p>Un premier paragraphe</p>
<button onclick="alert('Bouton cliqué')">Cliquez moi !</button>
<div onmouseover="[Link]='orange'"
clic
onmouseout="[Link]='white'"> Passage souris
<p>Un paragraphe dans un div</p>
<p>Un autre paragraphe dans le div</p>
</div>
</body>
Utiliser les propriétés JavaScript pour gérer un évènement
Ces gestionnaires d’évènements sont des propriétés qui sont de la forme « on » + nom de l’évènement géré, c’est-à-
dire qui ont des noms similaires aux attributs HTML vus précédemment.
<h1>Titre principal</h1>
<p>Un premier paragraphe</p>
<button>Cliquez moi !</button>
<div>
<p>Un paragraphe dans un div</p>
<p>Un autre paragraphe dans le div</p>
</div>
<script>
//On sélectionne le premier button et le premier div du document
let b1 = [Link]('button');
let d1 = [Link]('div');
//On utilise les propriétés gestionnaires d'évènement avec nos éléments
[Link] = function(){alert('Bouton cliqué')};
[Link] = function(){[Link] ='orange'};
[Link] = function(){[Link]='white'};
</script>
Inconvénient : on ne peut avoir qu’un seul gestionnaire par propriété (onclick, onmouseover, etc.).
Utiliser la méthode addEventListener() pour gérer un évènement
let b1 = [Link]('button');
let d1 = [Link]('div');
//On utilise la méthode addEventListener pour gérer des évènements
[Link]('click', function(){alert('Bouton cliqué')});
[Link]('mouseover', function(){[Link] ='orange'});
[Link]('mouseover', function(){[Link] ='bold'});
[Link]('mouseout', function(){[Link]='white'});
Supprimer un gestionnaire d’évènements avec removeEventListener()
let b1 = [Link]('button');
let d1 = [Link]('div');
function changeCouleur(){[Link] ='orange';}
//On utilise la méthode addEventListener pour gérer des évènements
[Link]('click', function(){alert('Bouton cliqué')});
[Link]('mouseover', changeCouleur);
[Link]('mouseover', function(){[Link] ='bold'});
//On supprime un évènement
[Link]('mouseover', changeCouleur);
La propagation des évènements en JavaScript
<body>
<h1>Titre principal</h1>
<p>Un premier paragraphe</p>
<div id='d1'>
<p id='d1p1'>Un paragraphe dans un div</p>
<p id='d1p2'>Un autre paragraphe dans le div</p>
</div>
<script>
let d1 = [Link]('#d1');
let d1p1 = [Link]('#d1p1');
[Link]('click', function(){alert('div cliqué')});
[Link]('click', function(){alert('paragraphe cliqué')});
</script>
</body>
L’exécution du code ci-dessus montre que si on clique sur le paragraphe d1p1, l’alerte liée au paragraphe
d1p1 sera affiché avant l’alerte liée à son père div d1: l’événement se propage du fils vers le père
Propagation du père vers le fils
Pour que la propagation se fasse du père vers le fils, on ajoute le paramètre
true comme il est montré sur le code ci-dessous:
let d1 = [Link]('#d1');
let d1p1 = [Link]('#d1p1');
[Link]('click', function(){alert('div cliqué')}, true);
[Link]('click', function(){alert('paragraphe cliqué')}, true);
Stopper la propagation d’un évènement
let d1 = [Link]('#d1');
let d1p1 = [Link]('#d1p1');