[OBJET] Appel d'une méthode sur un évènement

Résolu
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 28 févr. 2006 à 12:34
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 28 févr. 2006 à 15:08
Hello,

bon, je vais tâcher de la faire court.
J'ai une page dans laquelle je définis des objets js.
Puis j'instancie ces objets.
Ensuite, j'ai du html, des boutons, sur lesquels je place des évènements. Dans ces évènements, je tente de faire appel aux méthodes de mes objets.
Malheureusement, ça ne marche pas, mes instances n'existent plus.

Bref ça donne grosso modo ça :
<script type="text/javascript">
function objet1 () {
}

objet1.prototype.start () {
with (objet1) {
bla bla
}
}

objet1.prototype.methodeEvent = function (truc) {
with (objet1) {
bla bla
}
}

obj = new objet1 ();
</script>

<script type="text/javascript">
obj.start ();
</script>

obj = new objet1 (); fonctionne à merveille.

obj.start (); aussi.

Mais au milieu, le onclick="obj.methodeEvent('bla');" ne passe pas du tout. obj.methodeEvent n'est pas une fonction. Si je ne préfixe pas avec obj, il me dit que methodeEvent est indéfini.

Je voudrais, si possible : une explication (histoire de pas mourir bête), et une solution (tant qu'à faire ;-) ).

Merci par avance!! :-)

10 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 févr. 2006 à 12:54
Bonjour,
je ne suis sûr ni d'avoir compris, ni de répondre, mais :

<script type="text/javascript">
function objet1 ()
{
alert('objet1');
}
function objet1.prototype.start ()
{
with (objet1)
{
alert('start');
}
}


function objet1.prototype.methodeEvent(truc)
{
with (objet1)
{
alert('methodeEvent='+truc);
}
}


var obj = new objet1 ();
obj.start();
</script>

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>

</FO>
</S< body>
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 févr. 2006 à 13:48
Hello,

merci pour la réponse déjà.
Mais qu'as tu changé là au juste ?
Si ce n'est que la méthode start () est appelée avant le html ? Et dans mon cas, je ne peux pas. De toutes façons, ça ne change rien : mon objet est instancié. La pméthode start () est une autre méthode dont j'ai besoin plus tard (c'est un timer en fait).

Le problème est l'appel sur l'évènement : obj.methodeEvent('bla') ne passe pas.

J'ai résolu (temporairement), en faisant ujn truc bien tordu:

sur l'évènement, j'appelle une fonction normale : onclick="appelMethode ('bla');"

et dans le js APRES le html, je fais ceci :

function appelMethode (bla) {
obj1.methodeEvent(bla);
}

Et comme j'ai plusieurs instances d'ujn même objet, j'ai été obligé de jouer avec un id d'instance (je crées mes instances dans un tableau, je récupère la clef courante qui est aussi l'id de ma balise html sur laquelle se trouve l'évènement, et j'appelle la méthode correspondante à l'instance dont la clef est celle-ci...je sais c'est pas clair lol).

néanmoins, je teste ton code et j'essaye de reproduire mon problème avec...2mn :-)

2mn later...

Ahem, j'ai modifié ton code parce qu'en l'état il ne fonctionnait pas, mais en effet tu avais modifié plus que ce que je pensais ;-) :
<script type="text/javascript">
function objet1 ()
{
alert('objet1');
}
objet1.prototype.start = function ()
{
with (objet1)
{
alert('start');
}
}


objet1.prototype.methodeEvent = function (truc)
{
with (objet1)
{
alert('methodeEvent='+truc);
}
}


var obj = new objet1 ();


</script>



<script type="text/javascript">
obj.start();
</script>

et là, ça tourne, et c'est un gros soucis pour moi lol parce que c'est exactement la structure que j'ai (avais) et qui ne tourne pas...

Je ne veux pas mettre mon code ici parce qu'il est un peu long...mais je viens de le réécrire à peu près tel qu'il était, et décidément...je ne vois pas où est l'erreur.
Je dois manquer quelque chose...

Enfin, en tous cas, merci, parce que ça me permet de voir que ce que j'avais fait devrait fonctionner, et que je dois juste ne pas avoir les yeux en face des trous, là, sur mon code (une petite bévue a dû s'y glisser).
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 févr. 2006 à 14:19
Salut,




Un exemple qui marche :



<html>

<head>

<title>Objet Call méthode dans un onclick après document.write</title>

</head>



<script type="text/javascript">

function monobj(name_){

this.name_=name_;

this.afficher=afficher;

this.agir=agir;

}

function afficher(){

document.write('');

}

function agir(){

alert(this.name_+" agit !");

}

a=new monobj('a');

a.afficher();

</script>



</html>




à mon avis, il te manque this.agir=agir; dans ton constructeur....

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 févr. 2006 à 15:00
j'avais précisé dans mon dernier message
que le test était uniquement avec IE, mais
cette partie à sûrement été enlevée par
des extra-terrestres...
syntaxe différente entre FF et IE, hélas.
Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 févr. 2006 à 15:04
objet1.prototype.methodeEvent=function(truc)
{
alert('methodeEvent='+truc);
}

ça devrait le faire pour les 2

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 févr. 2006 à 14:46
Je te montrerai mon code, ce sera plus simple.
L'exemple que je mets plus haut, adapté de celui de Bul, fonctionne à merveille.
Mais pas dans mon code lol.

Je testerai quand même avec le this.agir = agir dans le constructeur, oki :-)

Merci :-)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 févr. 2006 à 14:52
plusieurs méthodes pour faire de l'Orienté Objet en JS,
j'en proposais une différente de celle utilisée
car j'en connais mieux la syntaxe, comme elle
me semble pouvoir s'appliquer partout (?) et
toujours (?) je n'ai jamais qu'utilisé que ça.
je pense que tu n'as qu'un "problème de syntaxe"

>>Si ce n'est que la méthode start () est appelée avant le html
non, bien entendu, après, ça baignerai aussi, j'ai fait comme ça pour
l'exemple, pour éviter 2 balises <script...., c'est tout.
>>ton code parce qu'en l'état il ne fonctionnait pas
euh ? ben si, mais en l'état hein, sans rien d'autre.

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 févr. 2006 à 14:55
Ben non lol, enfin pas chez moi. Je l'ai copié collé sur une page à part. J'ai l'erreur '
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 févr. 2006 à 14:56
Merde, l'erreur :'obj est indéfini'.
Sur Firefox. Sur IE j'ai pas encore testé (ce qui ne me rassure pas pour mon code lol).
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 févr. 2006 à 15:08
Oui, ça ça fonctionne ;-) Sauf dans mon code lol.
Le mystère reste entier pour moi...mais sur ce coup c'est moi le fautif : ton code marche Bul, je l'ai testé; mais dans mon code j'ai tjrs le soucis. Je suis persuadé que hj'ai fait une connerie quelquepart, ailleurs dans la page, qui provoque cette erreur.
Je trouverai plus tard...à tête reposée :-)

Merci à tous les deux !
0
Rejoignez-nous