Corriger les problèmes de fireevent avec ie9

Avant ie9, pour internet explorer il fallait utiliser une méthode différente des autres navigateurs pour déclencher des évènements : fireEvent pour internet explorer et dispatchEvent.

Du coup pour avoir une fonction qui marche dans tout les cas, on utilise souvent une fonction du type (celle-ci est extraite de jscolor.js) :

fireEvent : function(el, evnt) {
if(!el) {
return;
}
if(document.createEventObject) {
var ev = document.createEventObject();
el.fireEvent('on'+evnt, ev);
} else if(document.createEvent) {
var ev = document.createEvent('HTMLEvents');
ev.initEvent(evnt, true, true);
el.dispatchEvent(ev);
} else if(el['on'+evnt]) {
// alternatively use the traditional event model (IE5)
el['on'+evnt]();
}
}

Internet Explorer 9 est rentré dans le rang et utilise maintenant aussi dispatchEvent, le problème est que ie9 supporte encore createEventObject alors que fireEvent semble ne plus fonctionner, du coup les évènements ne sont pas déclenchés avec ie9 alors qu’ils marchent avec ie8.

La solution est d’inverser l’ordre des tests et de tester en premier createEvent, comme ça Internet explorer 9 n’utilisera plus fireEvent :

fireEvent : function(el, evnt) {
if(!el) {
return;
}
if(document.createEvent) {
var ev = document.createEvent('HTMLEvents');
ev.initEvent(evnt, true, true);
el.dispatchEvent(ev);
} else if(document.createEventObject) {
var ev = document.createEventObject();
el.fireEvent('on'+evnt, ev);
 } else if(el['on'+evnt]) {
// alternatively use the traditional event model (IE5)
el['on'+evnt]();
}
}
Cette entrée a été publiée dans Javascript, avec comme mot(s)-clef(s) , , , . Vous pouvez la mettre en favoris avec ce permalien.

Les commentaires sont fermés.