JeuWeb - Crée ton jeu par navigateur
Appel à une méthode JS dans une balise (X)HTML - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Appel à une méthode JS dans une balise (X)HTML (/showthread.php?tid=3090)

Pages : 1 2 3


Appel à une méthode JS dans une balise (X)HTML - Plume - 23-09-2008

Plop !

Je préviens tout de suite, je suis néophyte en JS. Je sais faire les trucs de bases - et encore - mais je pêche quand même pas mal quand il s'agit de pousser plus loin - mea culpa de pas m'y être mis plus tôt :]

Bien, pour l'expérience et la découverte, je me suis mis à développer un petit gadget pour un jeu.
J'ai actuellement un formulaire :
Code PHP :
<?php 
<h2>[C2G]Widget de calcul de la puissance des mages élémentaires</h2>

<
form name="calculPuissanceForm" id="calculPuissanceForm" method="post">
<
p class="noLabel">
<
label for="planeteCombat">Sur quelle planète se déroule le combat :</label>
<
select name="planeteCombat" id="planeteCombat">
<
option value="aquablue">Aquablue</option>
<
option value="desertica">Desertica</option>
<
option value="galactica">Galactica</option>
<
option value="vertana">Vertana</option>
<
option value="volcano">Volcano</option>
</
select>
</
p>

<
p>
<
label for="nbMageMetal">Nombre de mage(s) M&eacute;tal</label> :
<
input type="text" name="nbMageMetal" id="nbMageMetal" value="0" />
</
p>

<
p>
<
label for="nbMageEau">Nombre de mage(s) Eau</label> :
<
input type="text" name="nbMageEau" id="nbMageEau" value="0" />
</
p>

<
p>
<
label for="nbMageTerre">Nombre de mage(s) Terre</label> :
<
input type="text" name="nbMageTerre" id="nbMageTerre" value="0" />
</
p>

<
p>
<
label for="nbMageFeu">Nombre de mage(s) Feu</label> :
<
input type="text" name="nbMageFeu" id="nbMageFeu" value="0" />
</
p>

<
p>
<
label for="nbMageBois">Nombre de mage(s) Bois</label> :
<
input type="text" name="nbMageBois" id="nbMageBois" value="0" />
</
p>

<
p>
<
label for="totalDegatsMages">D&eacute;gats des mages</label> :
<
input type="text" name="totalDegatsMages" id="totalDegatsMages" value="0" />
</
p>
</
form>

J'ai ensuite développé une classe - encore maigre car je test avant de faire aboutir tout le bouiboui - que voilà :
Code PHP :
<?php 
// Classe de calcul
CalculPuissance = function(){

// Variables
this.x = 0;
this.y = 0;
this.bonus = 0;
this.niveauControleElementaire = 0;
this.planeteCombat = 0;
this.nbMageMetal = 0;
this.nbMageEau = 0;
this.nbMageTerre = 0;
this.nbMageFeu = 0;
this.nbMageBois = 0;
this.totalDegatsMages = 0;

// Méthodes
CalculPuissance.setY = function(){
if(
this.x != 0){

switch(
this.x){

case
1:
y = 4;
break;
case
2:
y = 5;
break;
default:
y = 3;
break;
}

return
y;
}else{

alert('Error : x not defined');
}
}

CalculPuissance.setPlaneteCombat = function(selectPlaneteCombat){

this.planeteCombat = selectPlaneteCombat.value;
alert(this.planeteCombat);
}

CalculPuissance.getDommages = function(dommages){

document.getElementById('totalDegatsMages').value = dommages;
}
}

var
CalculPuissance = new CalculPuissance();

J'aimerais que dans la case totalDegatsMages, il y ait un changement à chaque modification dans les autres cases - y compris le select - et j'ai donc essayé de faire quelque chose comme :
Code PHP :
<?php 
<input type="text" onKeyUp="CalculPuissance.getDommages(this.value)" name="nbMageMetal" id="nbMageMetal" value="0" />

Mais quoi que je fasse, la console me dis que CalculPuissance n'est pas défini. J'aimerais savoir donc comment le faire ?

Merci d'avance !

@tchaOo°


RE: Appel à une méthode JS dans une balise (X)HTML - keke - 23-09-2008

Coucou,

j'y connais rien non plus, mais ici, il y a 2 points ... est-ce normal ?
Citation :CalculPuissance..setY = function(){

Par ailleurs, je connais rien en classe, mais je sais que certains langage oblige à définir un constructeur ...

Bon, je laisse les autres répondre.

kéké


RE: Appel à une méthode JS dans une balise (X)HTML - Plume - 24-09-2008

Plop !

J'ai remarqué effectivement. D'un côté, c'est pas normal mais je le sais, de l'autre c'est normal. C'est une erreur à cause de maints copie/collage. N'avais déjà modifié. T'façon, c'est pas la méthode que j'utilise et ça ne résout évidemment pas la solution. Je sèche réellement. C'est sûrement tout con quand on a l'habitude ( Hein Anthor Big Grin ) mais pour l'instant, je ne sais pas.

Merci kéké pour la remontée :]

@tchaOo°

[Edition] Je précise que le CSS, le JS et le XHTML sont dans le même fichier :]

[Edition bis] J'ai rajouté le fichier en question en pièce jointe dans le premier billet. Ca vous permet de voir la structure totale du fichier.

[Remontée] 19h plus tard, je me permet de relever le fil :]


RE: Appel à une méthode JS dans une balise (X)HTML - Ter Rowan - 24-09-2008

je vais pas répondre dans l'ensemble (car pas sûr d'utiliser la bonne stratégie) simplement les règles que je suis désormais sont :

1) plus rien dans l'html (pas de <input onchange=f(x)> )

2) gérer les événements sur javascript
j'utilise par commodité une librairie mais il est assez simple de le faire (juste faire attention ie et le reste n'utilisent pas la même fonction)

3) du coup ça nous donne
GestionEvent ('id_de_l_input', code_de_l_evenement nom_de_la_fonction)

et tu crées une fonction 'nom_de_la_fonction( e) ' où e porte l'événement

si tu n'as pas besoin de savoir qui porte l'événement (genre y a 8 boutons qui pour le même événement vont avoir le même résultat mais inutile de savoir lequel des boutons a été cliqué) alors c'est une fonction comme une autre. Sinon c'est plus compliqué (enfin j'utilise prototype et du coup c'est pas compliqué)

voilà, c'est juste une réponse superficielle mais ça peut peut être t'aider un peu

a+


RE: Appel à une méthode JS dans une balise (X)HTML - Anthor - 24-09-2008

Je prend ta pièce jointe, je regarde ça dans l'aprèm ou ce soir.

M'enfin au lieu de t'embêter a placer l'objet partout, tu ferais mieux d'utiliser une librairie ou de déporter tes événements.


RE: Appel à une méthode JS dans une balise (X)HTML - Plume - 24-09-2008

Plop!

Petite précision. La pièce jointe est 'nettoyée'. Donc on ne voit plus l'appel à la méthode dans le XHTML. C'est surtout pour voir la structure du fichier :]

Merci pour votre aide les gens !

@tchaOo°

[Edition] Et pour répondre à Anthor, je ne connais déjà pas JS, j'vais pas m'embêter avec une librairie ou un fw JS :]


RE: Appel à une méthode JS dans une balise (X)HTML - Anthor - 24-09-2008

Ben justement la librairie te permet de passer outre ces connaissances, afin d'appliquer uniquement des méthodes normés.

Bref, au premier regard, change <script language="text/javascript"> par <script type="text/javascript">.

Ça devrait beaucoup mieux fonctionner.


RE: Appel à une méthode JS dans une balise (X)HTML - Plume - 24-09-2008

Aaaah ! Pas folle la guêpe... Merci Anthor, je test ça tout à l'heure et je redis ça.

Concernant la librairie, c'est comme tout, j'estime qu'il faut savoir comment fonctionne un outil pour vraiment le maitriser. Maintenant, j'ai le droit de me tromper ;]

@tchaOo°


RE: Appel à une méthode JS dans une balise (X)HTML - Plume - 24-09-2008

Plop !

T'avais tout bon Anthor. J'ai pas percuté que ça ferait chier car j'avais mis la même chose pour le CSS et ça passait :]
Moi qui m'attendait à une simple grosse incompétence en JS :']

Des avis sur mon point de vue pour l'utilisation d'une librairie ?

@tchaOo°


RE: Appel à une méthode JS dans une balise (X)HTML - pascal - 24-09-2008

Plume a écrit :Des avis sur mon point de vue pour l'utilisation d'une librairie ?

yo,

je suis pour l'utilisation des frameworks js Tongue

c'est sûr qu'utiliser sans connaitre c'est pas génial, mais avec des bases en javascript, c'est plus simple de faire un code portable sur les principaux navigateurs avec un FW qu'avec du code from scratch.

la portabilité/ compatibilité est assurée dans les frameworks JS, tandis que pour les bouts de code que l'on trouve à droite à gauche, il y a moins de garanties de compatibilité. en plus les FW sont documentés, que demande le peuple ?

A+

Pascal