J'ai besoin d'une fonction de navigateur croisé pour enregistrer les gestionnaires d'événements et une expérience de gestionnaire (pour la plupart) cohérente. Je n'ai pas besoin du poids ou des fonctionnalités d'une bibliothèque comme jQuery, j'ai donc écrit la mienne. Je crois que j'ai atteint mes objectifs avec le code ci-dessous, et jusqu'à présent mes tests ont été couronnés de succès, mais je l'ai regardé trop longtemps. Y a-t-il des failles dans ma logique ou des pièges qui me manquent?Gestion des événements inter-navigateurs
EDIT 1: A commenté chaque bloc avec l'intention du navigateur pour plus de clarté. Bloc IE mis à jour pour ne pas appeler func
tout de suite (merci à Andy E's keen eyes).
EDIT 2: Mise à jour bloc IE pour appeler func.call()
avec this
au lieu de elem
.
EDIT 3: Mis à jour pour passer le JSLint avec "les bonnes pièces".
function hookEvent(elem, evt, func)
{
if (typeof elem === "string")
{
elem = document.getElementById(elem);
}
if (!elem)
{
return null;
}
var old, r;
if (elem.addEventListener) //w3c
{
elem.addEventListener(evt, func, false);
r = true;
}
else if (elem.attachEvent) //ie
{
elem[evt + func] = function()
{
func.call(this, window.event);
};
r = elem.attachEvent("on" + evt, elem[evt + func]);
}
else //old
{
old = elem["on" + evt] ? elem["on" + evt] : function (e) { };
elem["on" + evt] = function (e)
{
if (!e)
{
e = window.event;
}
old.call(this, e);
func.call(this, e);
};
r = true;
}
return r;
}
jQuery est une bibliothèque très légère. Quel est le problème avec l'utilisation? Quelqu'un a déjà fait tout le travail pour vous. Ou n'êtes-vous pas intéressé à l'apprendre? –
@Bears va vous manger - 66K plus, par rapport à cela, est loin d'être léger. Surtout si c'est tout ce dont il a besoin. @Bill Ayakatubby - Par "navigateur croisé", vous voulez vraiment dire "des choses standard que IE ne gère pas correctement". – Rob
@Bears: À ce stade, le seul problème que j'ai avec mon navigateur est l'enregistrement d'événements, je n'ai donc pas besoin de jQuery ou d'une autre bibliothèque. Si ma situation change, je réévaluerai la nécessité d'une bibliothèque. –