Shinji49
Messages postés18Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention25 juin 2009
-
21 mai 2008 à 18:35
nicomilville
Messages postés3472Date d'inscriptionlundi 16 juillet 2007StatutMembreDernière intervention28 février 2014
-
22 mai 2008 à 07:11
Bonjour,
J'ai beau rechercher partout, je ne trouve pas la solution ! J'ai tout essayé mais rien n'y fait.
Alors, voila, je souhaite ajouter une fonction à la liste des evenements, mais hélas, le mot clé this qui est à l'intérieur de cette fonction se réfère au div et non a mon objet ! Essayez ceci :
<script type="text/javascript">
var testi = new monObjet({id:'testi', titre:'test'});
</script>
Lorsque vous cliquez vous vous rendez compte que la variable this.id vaut "testia", soit l'id du div ! Et que la variable this.titre est indéfinie. Donc, moi ce que je souhaite c'est pouvoir acceder par exemple à la variable titre de mon objet.
Savez vous comment faire ? Car c'est fou ce qu'il n'y a pas d'informations la dessus. Ha si, j'ai vu une solution qui consitait a mettre dans des tableaux... je trouve pas ça top...
ralecul
Messages postés111Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 1 août 2008 21 mai 2008 à 19:26
Salut,
Voici une solution :
monObjet.prototype.iniT = function(id,titre){
// Variables.
this.id = id;
this.titre = titre;
var test = document.getElementById('testia');
var that = this;
if (test.addEventListener)
test.addEventListener('click', function() { that.affMonID(); }, false);
else if (test.attachEvent)
test.attachEvent('onclick', function() { that.affMonID(); });
}
De nombreux problèmes :
- impossible de retirer les event : removeEventListener / detachevent ne marche pas avec une fonction anonyme.
- code dupliqué pour l'ajout de l'event : on peut faire facilement une méthode d'ajout d'event cross-browser :
//Equivalent simpliste de Event.observe(element, eventName, handler[, useCapture = false]) de prototype.js
function addEvent(element, eventName, callback)
{
if (element.addEventListener)
element.addEventListener(eventName, callback, false);
else if (element.attachEvent)
element.attachEvent('on'+eventName, callback);
}
Donc dans ton objet celà devient :
addEvent(test, "click", function() { that.affMonID(); });
Shinji49
Messages postés18Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention25 juin 2009 21 mai 2008 à 21:12
nicomilville : tu me parle de prototype -> le framework ? Ou de la methode prototype ?
ralecul : ta solution fonctionne ! C'est comme même fou que ce soit mal foutu a ce niveau Javascript ! lol Bref, je m'en contente. Par contre, au niveau des problème, je comprend pas trop ? Comment sa code dupliqué ?
Cross-browser signifie compatible tout navigateur ?
Merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?