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

Signaler
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
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

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
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>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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).
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
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)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
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>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
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>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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 :-)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
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>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ben non lol, enfin pas chez moi. Je l'ai copié collé sur une page à part. J'ai l'erreur '
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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).
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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 !