En effet : ça peut vous arriver d'avoir besoin d'ajouter des événements sur un élément que vous avez fait apparaître sur la page.
Rien de plus facile. Suffit d'utiliser setAttribute("onEvenement"...
Eh bien sur le papier on devrait pouvoir le faire comme ça. Mais dans la réalité, il est bien plus propre, portable et sûr d'utiliser une méthode appelée
addEventListener, ou
attachEvent pour IE.
Comment comptes-tu faire quelque chose de compatible IE et FF (Firefox) s'il y a deux fonctions différentes ?
Je vous montrerai la technique plus tard, mais sachez qu'il y a moyen. Donc notre
EventListener, c'est en fait une sorte de surveillant affecté à une balise, et qui va réagir si jamais l'événement se produit. Je ne compte pas rentrer dans les détails de cette fonction, je veux juste vous montrer comment elle marche, et comment nous allons pouvoir l'utiliser.
Tout d'abord, nous avons besoin d'un
node :
Code : JavaScript | var node = document.createElement("input");
|
Bien. Ensuite, nous allons devoir appeler la fonction
addEventListener comme suit :
Code : JavaScript | node.addEventListener("change",fonction,true)
|
Ici, une explication s'impose. D'abord, le premier paramètre est l'événement sans le "
on" habituel. Ensuite, nous avons le nom (et le nom seulement... pas de ()) de la fonction appelée si l'événement se produit. Enfin, il y a un paramètre qui vaut
true ou
false. Vos scripts peuvent réagir de différentes manières selon que vous utilisez l'un ou l'autre, mais je ne veux pas vous détailler ce qu'il se passe. A la fin de ce cours, je vous donnerai des liens intéressants pour approfondir vos connaissances.
Je vous avais donc dit que nous allions pouvoir différencier les deux navigateurs de type Netscape et Internet Explorer. Chose promise, chose due, voilà la solution :
Code : JavaScript | if(document.all){
//instructions pour ie
}
else{
//instructions pour netscape et autres
}
|
Donc, nous allons pouvoir faire :
Code : JavaScript | if(document.all) node.attachEvent("onchange",fonction);
else node.addEventListener("change",fonction,true);
|
Notez bien les quelques différences entre les deux fonctions. Celle de IE prend le "
on" avant le nom de l'événement, et il n'y a pas de paramètre valant
true ou
false.
Bien. Maintenant que vous savez tout ça, il faut que vous appreniez comment récupérer des informations qui peuvent être intéressantes pour savoir d'où vient l'événement, comment il s'est produit, ce qui a changé...
Donc : vous avez créé votre fonction dont vous avez mis le nom dans l'
event listener. Voilà la forme qu'elle va devoir avoir :
Code : JavaScript | function maFonction(event){
}
|
Comme vous pouvez le voir, déjà elle reçoit un paramètre qui est un objet associé à notre événement. Il existe pas mal de méthodes à utiliser sur cet objet qui vont nous permettre de récupérer nos informations.
Les méthodes diffèrent pas mal de Firefox à Internet Explorer. Il va donc falloir une nouvelle fois mettre un if...else.
La principale méthode dont nous aurons besoin est
target pour Firefox, et
srcElement pour Internet Explorer. Ces méthodes nous renvoient le
node sur lequel s'est produit l'événement. Pour pouvoir récupérer le noeud, quelque soit le navigateur, utilisez cette ligne de code :
Code : JavaScript | var node_source = (document.all)?event.srcElement:event.target;
|
Je ne rentrerai pas dans les détails d'une condition ternaire, mais sachez juste que notre
node_source vaut maintenant le
node où s'est produit l'événement.
Voici quelques idées de ce qu'on peut récupérer avec l'élement
event : les coordonnées de la souris, la touche ou le bouton de souris pressé, ainsi que des méthodes concernant le
drag and drop d'objet sur votre page.
Voilà : nous savons donc insérer des événements dynamiquement sur notre page. On va maintenant passer à quelques exercices.