Bonjour,
J'essaye de comprendre le modèle d'évènements DOM 2, et j'ai plusieurs question sur ce sujet.
Les seules fois ou j'ai créé des scripts qui utilisent ce modèle je l'ai fait à l'aide de librairies adaptée. Sans l'aide de ces framworks j'ai systématiquement été confronté a des problèmes, donc je voudrais savoir si vous utilisez régulièrement cette fonction a la place du modèle DOM 1.
Le premier problème de taille que l'on rencontre c'est la perte du "this" sur la fonction callBack para internet explorer, cela peut être résolu par la fonction de John Resig http://ejohn.org/projects/flexible-javascript-events/. Soit...
L'autre problème c'est le passage d'un argument dans la fonction callback comme le this de la méthode en cours par exemple, comme résolu par Yahoo! UI Library http://developer.yahoo.com/yui/event/. Ok mais il faut utiliser Yahoo! UI Library donc pour un petit projet ça fait beaucoup pour un addEvent!
J'ai donc essayer de coder une fonction qui fasse la même chose et j'aimerais votre avis :
La différence avec la fonction de yahoo! c'est que dans la this de la fonction callback on n' a pas accés aux propriétés de l'objet parent
dans yahoo on peut faire :
avec le code plus haut on fait :
J'ai essayer de le faire en ajoutant a la fonction :
Cela ne marche pas avec ie, mais tout bien réfléchi ce n'est pas un problème au contraire cela évitera la confusion entre les this des différentes fonctions et les éventuels paramètre identiques. Le principal est de pouvoir faire passer l'argument.
Modifié par matmat (18 Apr 2008 - 19:07)
J'essaye de comprendre le modèle d'évènements DOM 2, et j'ai plusieurs question sur ce sujet.
Les seules fois ou j'ai créé des scripts qui utilisent ce modèle je l'ai fait à l'aide de librairies adaptée. Sans l'aide de ces framworks j'ai systématiquement été confronté a des problèmes, donc je voudrais savoir si vous utilisez régulièrement cette fonction a la place du modèle DOM 1.
Le premier problème de taille que l'on rencontre c'est la perte du "this" sur la fonction callBack para internet explorer, cela peut être résolu par la fonction de John Resig http://ejohn.org/projects/flexible-javascript-events/. Soit...
L'autre problème c'est le passage d'un argument dans la fonction callback comme le this de la méthode en cours par exemple, comme résolu par Yahoo! UI Library http://developer.yahoo.com/yui/event/. Ok mais il faut utiliser Yahoo! UI Library donc pour un petit projet ça fait beaucoup pour un addEvent!
J'ai donc essayer de coder une fonction qui fasse la même chose et j'aimerais votre avis :
function addEvent(obj, type, fn, objParent){
if(obj.addEventListener){
obj.addEventListener(type, function(event){
return fn.call(obj,event,objParent);
}, false );
}else if(obj.attachEvent){
obj.attachEvent("on"+type, function(e){
if (!e) var e = window.event;
return fn.call(obj, e, objParent);
});
}
}
La différence avec la fonction de yahoo! c'est que dans la this de la fonction callback on n' a pas accés aux propriétés de l'objet parent
dans yahoo on peut faire :
addListener(elementId,'click',function(event,par){
alert(this.parameterProperty)
},parameter);
avec le code plus haut on fait :
addListener(elementId,'click',function(event,par){
alert(par.parameterProperty)
},parameter);
J'ai essayer de le faire en ajoutant a la fonction :
if(obj.addEventListener){
obj.addEventListener(type, function(event){
for (var property in objParent){
this[property] = objParent[property];
}
return fn.call(obj,event,objParent);
}, false );
}else if(obj.attachEvent){
obj.attachEvent("on"+type, function(e){
for (var property in objParent){
this[property] = objParent[property];
}
if (!e) var e = window.event;
return fn.call(obj, e, objParent);
});
Cela ne marche pas avec ie, mais tout bien réfléchi ce n'est pas un problème au contraire cela évitera la confusion entre les this des différentes fonctions et les éventuels paramètre identiques. Le principal est de pouvoir faire passer l'argument.
Modifié par matmat (18 Apr 2008 - 19:07)