Ainsi par exemple, si vous faites:
document.getElementById('foo').onclick = function() {
};
... puis tout gestionnaire click
précédent sur l'élément foo
époustouflé et obtient non plus appelé quand foo
cliquez dessus. En revanche:
document.getElementById('foo').addEventListener('click', function() {
});
Maintenant, votre gestionnaire click
est appelé, mais toutes les autres click
gestionnaires qui ont déjà été attachés à l'élément également obtenir appelé. Tu joues bien avec les autres. :-)
Il est facile de créer une fonction qui fers ces choses pour vous:
function hookEvent(element, eventName, handler) {
if (element.attachEvent) {
element.attachEvent("on" + eventName, handler);
}
else if (element.addEventListener) {
element.addEventListener(eventName, handler, false);
}
else {
element["on" + eventName] = handler;
}
}
... ou si vous vraiment veulent aller à la ville:
var hookEvent = (function() {
function hookViaAttach(element, eventName, handler) {
element.attachEvent("on" + eventName, handler);
}
function hookViaAdd(element, eventName, handler) {
element.addEventListener(eventName, handler, false);
}
function hookDOM0(element, eventName, handler) {
element["on" + eventName] = handler;
}
if (document.attachEvent) {
return hookViaAttach;
}
if (document.addEventListener) {
return hookViaAdd;
}
return hookDOM0;
})();
... qui crée une fonction qui détecte fois quel type de gestionnaire à utiliser, puis utilise tout au long.
Franchement, bien que, pour ce genre de choses, il est utile de tirer parti du travail des autres et utiliser une bibliothèque comme jQuery, Prototype, YUI, Closure ou any of several others.
Je vous remercie tous les commentaires au sujet jAuery :) – Babiker