Envoyé par
dhillig
Bonsoir Watilin,
L'audio et le logo ont leurs id, mais :
1 2 3 4 5 6 7
| function pause() {
var audio = document.getElementById("audio");
}
function load() {
var el = document.getElementById("logo");
el.addEventListener("click", audio.pause, false);
} |
Je fais plus que débuter en js. Où sont mes (nombreuses) erreurs ???
Il y en a juste deux petites :
- Tu n'as pas besoin de déclarer une fonction pause ;
- La variable audio que tu as déclarée dans ta fonction pause n'est pas à portée depuis la fonction load. N'oublie pas que la portée des variables en JavaScript est délimitée par les fonctions.
Une autre chose qui pourrait éventuellement poser problème, c'est le changement de contexte de la méthode pause. Prenons ce code comme exemple :
1 2 3 4 5
| function load() {
var audio = document.getElementById("audio");
var el = document.getElementById("logo");
el.addEventListener("click", audio.pause, false);
} |
Lorsque audio.pause est appelée, elle reçoit el comme contexte, c'est-à-dire que l'objet this dans cette fonction sera el. C'est une particularité de addEventListener. Le problème est que pause est censée avoir audio comme contexte, et comme c'est une méthode native, tu n'as aucun moyen de savoir si elle utilise this ou pas. Peut-être que ça ne pose pas de problème dans le cas présent, mais sache que ce problème peut se produire avec d'autres objets.
Ça arrive par exemple avec l'objet console :
document.body.addEventListener("click", console.log, false);
Lors d'un clic, je reçois ce message :
TypeError: 'log' called on an object that does not implement interface Console.
Désolé si je rentre dans les détails techniques, mais il vaut mieux que tu saches d'où vient le problème si jamais tu le rencontres un jour.
En fait, la solution est simple :
document.body.addEventListener("click", function(event){ console.log(event); }, false);
Et donc dans ton cas :
el.addEventListener("click", function() { audio.pause(); }, false);
Mais si tu préfères, tu peux prendre la solution de LuluHow
Envoyé par
LuluHow
Tu n'est pas obligé de passer par un addEventListener, un .onclick suffit je pense.
Mais alors en quoi addEventListener est utile finalement ? Réponse : il permet d'attacher plusieurs fonctions sur le même évènement du même objet. Alors que si on modifie un onclick, la fonction précédente est oubliée.
Il n'y a rien de plus fouuuh, plus gentiiiiiih…
Partager