Accueil > > > AJOUTER 'ADDEVENTLISTENER' SUR INTERNET EXPLORER
AJOUTER 'ADDEVENTLISTENER' SUR INTERNET EXPLORER
Information sur la source
Description
Voici une manière d'ajouter la fonction addEventListener sur Internet Explorer (testé sur la version 7) sans modifier Object.prototype . addEventListener est une fonction décrite dans le DOM Level 2 et qui n'est pas encore prise en charge par IE. La technique est d'overrider les fonctions getElementById, getElementByName, getElementsByTagName. On stock l'ancienne méthode dans une variable (ex. : oldGetElementById) et on appelle l'ancienne méthode à l'interieur du corps de la nouvelle, on modifie le ou les objets récupéré(s) , en ajoutant addEventListener et on retourne ces même objets. - l'utilisateur (le coder) n'y a vu que du feu :) - on ne modifie pas Object.prototype. - on ne reecrit pas "vraiment" les fonctions puisqu'on les appelle de toute façons :)
Source
- //ce code est utile uniquement sur IE,donc
- //on vérifie qu'on est bien sur IE.
- var using_ie = typeof(ActiveXObject)!="undefined";
- if(using_ie)
- {
- //sauvegarde des ancienne méthodes.
- var oldGetElementById = document.getElementById;
- var oldGetElementsByName = document.getElementsByName;
- var oldGetElementsByTagName = document.getElementsByTagName;
-
- //override
- document.getElementById = function(id)
- {
- //appel de l'ancienne méthode pour récupérer l'élement.
- var obj = oldGetElementById(id);
- //ajout des fonctions
- obj.addEventListener = addEventListener;
- obj.executeEvents = executeEvents;
- return obj;
- }
- //comme getElementById mais avec une boucle qui
- //parcourt chacun des éléments.
- document.getElementsByTagName = function(tag)
- {
- var obj = oldGetElementsByTagName(tag);
- for(obj_i=0;obj_i<obj.length;obj_i++)
- {
- obj[obj_i].addEventListener = addEventListener;
- obj[obj_i].executeEvents = executeEvents;
- }
- return obj;
- }
- //identique à getElementsByTagName.
- document.getElementsByName = function(name)
- {
- var obj = oldGetElementsByName(name);
- for(obj_i=0;obj_i<obj.length;obj_i++)
- {
- obj[obj_i].addEventListener = addEventListener;
- obj[obj_i].executeEvents = executeEvents;
- }
- return obj;
- }
-
- //Ajoute l'évenement dans un Array.
- var addEventListener = function(eventName,callback,b)
- {
- //on donne un nom a l'array qui contiendra les callbacks.
- //chaque évenement possede un Array différent.
- var eventArrayName = "ieEventList_"+eventName;
- //Si l'array est inexistant on le crée et on
- //lui indique comment executer les fonctions.
- if(typeof(this[eventArrayName])=="undefined")
- {
- var me = this;
- this[eventArrayName] = new Array();
- this["on"+eventName] = function()
- {
- me.executeEvents(eventName);
- }
- }
- //ajoute la fonction.
- this[eventArrayName].push(callback);
- }
-
- //execute la liste de fonctions se trouvant dans
- //l'Array attribué à un évenement.
- var executeEvents = function(eventName)
- {
- var eventArrayName = "ieEventList_"+eventName;
- if(typeof(this[eventArrayName])=="undefined")
- return;//au cas ou..
- //éxecution de chaque évenement.
- for(eventIndex=0;eventIndex<
- this[eventArrayName].length;eventIndex++)
- {
- this[eventArrayName][eventIndex]();
- }
- }
- }
//ce code est utile uniquement sur IE,donc
//on vérifie qu'on est bien sur IE.
var using_ie = typeof(ActiveXObject)!="undefined";
if(using_ie)
{
//sauvegarde des ancienne méthodes.
var oldGetElementById = document.getElementById;
var oldGetElementsByName = document.getElementsByName;
var oldGetElementsByTagName = document.getElementsByTagName;
//override
document.getElementById = function(id)
{
//appel de l'ancienne méthode pour récupérer l'élement.
var obj = oldGetElementById(id);
//ajout des fonctions
obj.addEventListener = addEventListener;
obj.executeEvents = executeEvents;
return obj;
}
//comme getElementById mais avec une boucle qui
//parcourt chacun des éléments.
document.getElementsByTagName = function(tag)
{
var obj = oldGetElementsByTagName(tag);
for(obj_i=0;obj_i<obj.length;obj_i++)
{
obj[obj_i].addEventListener = addEventListener;
obj[obj_i].executeEvents = executeEvents;
}
return obj;
}
//identique à getElementsByTagName.
document.getElementsByName = function(name)
{
var obj = oldGetElementsByName(name);
for(obj_i=0;obj_i<obj.length;obj_i++)
{
obj[obj_i].addEventListener = addEventListener;
obj[obj_i].executeEvents = executeEvents;
}
return obj;
}
//Ajoute l'évenement dans un Array.
var addEventListener = function(eventName,callback,b)
{
//on donne un nom a l'array qui contiendra les callbacks.
//chaque évenement possede un Array différent.
var eventArrayName = "ieEventList_"+eventName;
//Si l'array est inexistant on le crée et on
//lui indique comment executer les fonctions.
if(typeof(this[eventArrayName])=="undefined")
{
var me = this;
this[eventArrayName] = new Array();
this["on"+eventName] = function()
{
me.executeEvents(eventName);
}
}
//ajoute la fonction.
this[eventArrayName].push(callback);
}
//execute la liste de fonctions se trouvant dans
//l'Array attribué à un évenement.
var executeEvents = function(eventName)
{
var eventArrayName = "ieEventList_"+eventName;
if(typeof(this[eventArrayName])=="undefined")
return;//au cas ou..
//éxecution de chaque évenement.
for(eventIndex=0;eventIndex<
this[eventArrayName].length;eventIndex++)
{
this[eventArrayName][eventIndex]();
}
}
}
Conclusion
hehe
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Evenement onmouseout et Firefox [ par fenzy75 ]
Bonjour ,j'ai un probleme avec un menu deroulant.Mon menu marche tres bien sur MIE mais sous Firefox il semblerai que l'evenement onmouseout ne soit p
Detection du navigateur qui différencie FIREFOX et NETSCAPE [ par barth707 ]
Bonjour,Je cherche depuis un moment déjà une detection en javascript qui me permet de faire la différence entre Firefox et Netscape.Si
window.location et firefox [ par 8livier ]
bonjour,un petit probleme avec firefox....window.location=formulaire.commune.options[formulaire.commune.selectedIndex].value;ne fonctionne pas....Que
menu deroulant sous FIREFOX [ par stopworries ]
Salut tout le monde,J'ai un menu horizontal sur ma page en css et js qui fonctionne tres bien, seulement sous IE. Sous firefox, le menu se decale vers
Evenement "Retour Arriere". [ par Coup2vent ]
Bonjour,Etant novice, je m'adresse a ce forum en esperant avoir une reponse de votre part.Mon problème est le suivant:J'ai une page avec un bouto
saveas sous FireFox [ par crashtest ]
Bonjour,alors c'est simple je voudrais faire pareil que le saveas de IE mais sous FireFox voila @++ et merci pour vos réponse.Mes sitewebs (fonct
detecter Firefox (et non netscape) [ par Breskovic ]
Bonjour, mon site pose un problème sérieux avec Netscape (PC/Mac), et seulement Netscape. Je ne peux donc pas laisser un utilisateur Netsca
Comment mettre Date et Heure valide pour IE, Nescape, Firefox [ par JLB59 ]
Bonjour tout le monde, J'ai fait un site que j'ai mis en ligne. Comme j'utilisais IE en local pour voir le résultat, je n'ai eu aucun prb. J'ai
URGENT !! Probleme sur l'evenement Onchange sur un objet Input type Text [ par jolazoule ]
Bonjour,je développe actuellement un panier pour un site marchand. Sur la page recapitulative il y le nom du produit puis une TextBox <input t
utilisation de document.location.reload sous firefox [ par josymarc ]
Bonjour,Après avoir cherché partout une réponse, je fais une dernière tentative. Dans mon portail, j'ai une page qui permet de cho
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|