Se connecter / S'enregistrer
Votre question

Problème Javascript

Tags :
  • Javascript
  • Programmation
Dernière réponse : dans Programmation
1 Mars 2005 21:11:06

Bonjour, je sais pas si beaucoup de gens s'y connaissent en javascript mais j'ai un petit problème que je n'arrive à résoudre.

Voici mon javascript:

<*script language="JavaScript" type="text/javascript">
<!--
function checkbuy2 ( formulaire,id )
{
var money = formulaire.cmoney.value;
var energy = formulaire.cenergy.value;
var moneylos = formulaire.unit2[id].value * formulaire.blue_id.value;
var energylos = formulaire.unit2[id].value * formulaire.energy_id.value;
var moneyleft = money - moneylos;
var energyleft = energy - energylos;

formulaire.cmoney.value = moneyleft;
formulaire.cenergy.value = energyleft;

return checkbuy(buy);
}
//-->
</*script>

Il y a 2 problèmes:

- l'id n'est pas affiché alors qu'il est bien défini par exemple: energy_id reste energy_id au lieu d'être energy_1 par exemple. Mais si je fais par exemple:
alert("id"); Ca m'écrit bien la valeur de l'id !!!

- le nom de mon champs unit2 est unit2[id] car il représente un tableau php. Mais apparement les [] ne veulent pas passer dans le javascript.

Est-ce que quelqun peut m'aider ?

Merci !

Autres pages sur : probleme javascript

1 Mars 2005 21:51:55

Salut,

pour le premier problème remplace :

formulaire.energy_id.value;

par :

eval(formulaire + ".energy_" + id + ".value")

pour ce qui est du second problème je confirme que ça ne peut pas marcher, mais a vrai dire je ne comprends pas ce que tu veux faire ! tu veux interroger un tableau en php avec du javascript ??
1 Mars 2005 22:00:41

Non, en faite j'ai besoin de ce tableau pour faire marcher mon script PHP. Le problème est que je veux aussi faire une vérif java sur ce champs. C'est vraiment pas possible ?
Contenus similaires
1 Mars 2005 22:06:38

Par contre en remplaçant par eval() ca me met 'object' est indéfini...
1 Mars 2005 22:14:13

ok, peux tu copier l'intégralité de ta page, ou au moins le formulaire avec les appels des fonctions ? ainsi je pourrai voir le problème dans son ensemble !
1 Mars 2005 22:16:19

<body onLoad="return checkbuy(buy);">
<form name="buy" action="index.php?page=cc&p=buildings&b=cc" method="post">
<input type="hidden" name="cmoney" value="2057.55">
<input type="hidden" name="cenergy" value="0">
<*script language="JavaScript" type="text/javascript">
<!--
function checkbuy ( formulaire )
{
if ((formulaire.blue_1.value == '0')&&(formulaire.green_1.value != '0')) {
var max1 = Math.floor(formulaire.cenergy.value / formulaire.green_1.value);
}
else if ((formulaire.green_1.value == '0')&&(formulaire.blue_1.value != '0')) {
var max1 = Math.floor(formulaire.cmoney.value / formulaire.blue_1.value);
}
else if ((formulaire.green_1.value != '0')&&(formulaire.blue_1.value != '0')) {
var max1_1 = Math.floor(formulaire.cenergy.value / formulaire.green_1.value);
var max1_2 = Math.floor(formulaire.cmoney.value / formulaire.blue_1.value);
if(max1_1 < max1_2) {
var max1 = max1_1;
}
else {
var max1 = max1_2;
}
}
formulaire.maxunit_1.value = max1;
if ((formulaire.blue_2.value == '0')&&(formulaire.green_2.value != '0')) {
var max2 = Math.floor(formulaire.cenergy.value / formulaire.green_2.value);
}
else if ((formulaire.green_2.value == '0')&&(formulaire.blue_2.value != '0')) {
var max2 = Math.floor(formulaire.cmoney.value / formulaire.blue_2.value);
}
else if ((formulaire.green_2.value != '0')&&(formulaire.blue_2.value != '0')) {
var max2_1 = Math.floor(formulaire.cenergy.value / formulaire.green_2.value);
var max2_2 = Math.floor(formulaire.cmoney.value / formulaire.blue_2.value);
if(max2_1 < max2_2) {
var max2 = max2_1;
}
else {
var max2 = max2_2;
}
}
formulaire.maxunit_2.value = max2;
}
//-->
<*/script><*script language="JavaScript" type="text/javascript">
<!--
function checkbuy2 ( formulaire,id )
{
var money = formulaire.cmoney.value;
var energy = formulaire.cenergy.value;
var moneylos = eval(formulaire + ".unit_" + id + ".value") * eval(formulaire + ".blue_" + id + ".value");
var energylos = eval(formulaire + ".unit_" + id + ".value") * eval(formulaire + ".energy_" + id + ".value");
var moneyleft = money - moneylos;
var energyleft = energy - energylos;

formulaire.cmoney.value = moneyleft;
formulaire.cenergy.value = energyleft;

return checkbuy(buy);
}
//-->
<*/script>
<table width="500" style="border: 1px solid #000000">
<tr>
<td width="100" bgcolor="#444444" valign="top">
<table align="center" width="96">
<tr>
<td width="96" height="96" bgcolor="#444444" style="border: 1px solid #000000"><img src="images/Space Marines/Scout.gif" border="0" width="96" height="96"></td>
</tr>
</table>
</td>
<td width="400" bgcolor="#444444" valign="top">
<table align="center" width="390" cellspacing="0">
<tr>
<td width="33%" bgcolor="#555555" style="border-left: 1px solid #000000;;border-bottom: 1px solid #000000;border-top: 1px solid #000000;"><b>Scout</b></td>
<td width="33%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;border-top: 1px solid #000000;"><b>Life:</b> 125</td>
</tr>
<tr>
<td width="33%" bgcolor="#555555" style="border-left: 1px solid #000000;;border-bottom: 1px solid #000000;"><b>Type:</b> Long-Range Unit</b></td>
<td width="33%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;">Light Infantry</td>
</tr>
<tr>
<td width="100%" colspan="2" bgcolor="#555555" style="border-left: 1px solid #000000;border-right: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Description:</b> Basic Infantry</td>
</tr>
<tr>
<td width="50%" bgcolor="#555555" style="border-left: 1px solid #000000;;border-bottom: 1px solid #000000;"><b>Armory:</b><img src="images/2star.gif" title="10 %"></td>
<td width="50%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Damage:</b><img src="images/0star.gif" title="12-26"></td>
</tr>
<tr>
<td width="50%" bgcolor="#555555" style="border-left: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Price:</b>  Money: <b>90</b>  Energy: <b>0</b></td>
<td width="50%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Number to buy:</b>  <input type="text" class="small" name="unit_1" size="3" maxlength="9" value="0" onChange="return checkbuy2(buy,1);"> / <input class="small" name="maxunit_1" title="Maximum number to buy" type="text" size="3" readonly> <input type="hidden" name="blue_1" value="90"><input type="hidden" name="green_1" value="0"></td>
</tr>
</table>
</td>
</tr>
</table>
1 Mars 2005 22:22:46

L'erreur Mozilla est:

Erreur : missing ] after element list
Code Source :
[object HTMLFormElement].unit_1.value
1 Mars 2005 23:27:49

voilà la solution !

<html>
<head>
<*script language="JavaScript" type="text/javascript">
<!--
function checkbuy (formulaire){

formulaire = eval ("document." + formulaire);

if ((formulaire.blue_1.value == '0')&&(formulaire.green_1.value != '0')) {
var max1 = Math.floor(formulaire.cenergy.value / formulaire.green_1.value);
}
else
if ((formulaire.green_1.value == '0')&&(formulaire.blue_1.value != '0')) {
max1 = Math.floor(formulaire.cmoney.value / formulaire.blue_1.value);
}
else
if ((formulaire.green_1.value != '0')&&(formulaire.blue_1.value != '0')) {
max1_1 = Math.floor(formulaire.cenergy.value / formulaire.green_1.value);
max1_2 = Math.floor(formulaire.cmoney.value / formulaire.blue_1.value);
if(max1_1 < max1_2) max1 = max1_1;
else max1 = max1_2;
}

formulaire.maxunit_1.value = max1;

if ((formulaire.blue_2.value == '0')&&(formulaire.green_2.value != '0')) {
max2 = Math.floor(formulaire.cenergy.value / formulaire.green_2.value);
}
else
if ((formulaire.green_2.value == '0')&&(formulaire.blue_2.value != '0')) {
var max2 = Math.floor(formulaire.cmoney.value / formulaire.blue_2.value);
}
else
if ((formulaire.green_2.value != '0')&&(formulaire.blue_2.value != '0')) {
max2_1 = Math.floor(formulaire.cenergy.value / formulaire.green_2.value);
max2_2 = Math.floor(formulaire.cmoney.value / formulaire.blue_2.value);
if(max2_1 < max2_2) max2 = max2_1;
else max2 = max2_2;
}
formulaire.maxunit_2.value = max2;
}


function checkbuy2 ( formulaire,id ){

formulaire = eval ("document." + formulaire);



money = formulaire.cmoney.value;
energy = formulaire.cenergy.value;
moneylos = eval("formulaire.unit_" + id + ".value") * eval("formulaire.blue_" + id + ".value");
energylos = eval("formulaire.unit_" + id + ".value") * eval("formulaire.green_" + id + ".value");
moneyleft = money - moneylos;
energyleft = energy - energylos;

formulaire.cmoney.value = moneyleft;
formulaire.cenergy.value = energyleft;

checkbuy('buy');
}
//-->
</script>
</head>
<body onLoad="return checkbuy('buy');">
<form name="buy" action="index.php?page=cc&p=buildings&b=cc" method="post">
<input type="hidden" name="cmoney" value="2057.55">
<input type="hidden" name="cenergy" value="0">

<table width="500" style="border: 1px solid #000000">
<tr>
<td width="100" bgcolor="#444444" valign="top">
<table align="center" width="96">
<tr>
<td width="96" height="96" bgcolor="#444444" style="border: 1px solid #000000"><img src="images/Space Marines/Scout.gif" border="0" width="96" height="96"></td>
</tr>
</table>
</td>
<td width="400" bgcolor="#444444" valign="top">
<table align="center" width="390" cellspacing="0">
<tr>
<td width="33%" bgcolor="#555555" style="border-left: 1px solid #000000;border-bottom: 1px solid #000000;border-top: 1px solid #000000;"><b>Scout</b></td>
<td width="33%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;border-top: 1px solid #000000;"><b>Life:</b> 125</td>
</tr>
<tr>
<td width="33%" bgcolor="#555555" style="border-left: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Type:</b> Long-Range Unit</b></td>
<td width="33%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;">Light Infantry</td>
</tr>
<tr>
<td width="100%" colspan="2" bgcolor="#555555" style="border-left: 1px solid #000000;border-right: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Description:</b> Basic Infantry</td>
</tr>
<tr>
<td width="50%" bgcolor="#555555" style="border-left: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Armory:</b><img src="images/2star.gif" title="10 %"></td>
<td width="50%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Damage:</b><img src="images/0star.gif" title="12-26"></td>
</tr>
<tr>
<td width="50%" bgcolor="#555555" style="border-left: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Price:</b> Money: <b>90</b> Energy: <b>0</b></td>
<td width="50%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Number to buy:</b>


<input type="text" class="small" name="unit_1" size="3" maxlength="9" value="0" onChange="checkbuy2('buy',1);">
/
<input class="small" name="maxunit_1" title="Maximum number to buy" type="text" size="3" readonly>
<input type="hidden" name="blue_1" value="90">
<input type="hidden" name="green_1" value="0">
</td>
</tr>


<tr>
<td width="50%" bgcolor="#555555" style="border-left: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Price:</b> Money: <b>90</b> Energy: <b>0</b></td>
<td width="50%" bgcolor="#555555" style="border-right: 1px solid #000000;border-bottom: 1px solid #000000;"><b>Number to buy:</b>


<input type="text" class="small" name="unit_2" size="3" maxlength="9" value="0" onChange="checkbuy2('buy',2);">
/
<input class="small" name="maxunit_2" title="Maximum number to buy" type="text" size="3" readonly>
<input type="hidden" name="blue_2" value="90">
<input type="hidden" name="green_2" value="0">
</td>
</tr>
</table>
</td>
</tr>
</table>
1 Mars 2005 23:32:37

Par contre j'ai du rajouter des champs manquant dans la page. A noter aussi que j'ai modifié "energy_" par "green_" n'ayant pas trouvé de champ "energy_" dans la page ! Il y avait une solution plus simple pour écrire ton script mais je n'ai pas voulu trop le modifier pour conserver ta logique !
2 Mars 2005 14:47:15

Merci de ta réponse Arphys mais j'ai un autre petit problème quand je veux changer la valeur d'un champs:

formulaire.lastval_id.value = val;

Il faut que l'id soit aussi défini en fonction de l'id dans la fonction. J'ai déjà essayé avec un eval mais apparement ça ne passe pas lors de la définition d'un champs.

1 formulaire = eval ("document." + formulaire);
2 eval("formulaire.lastval_" + id + ".value") = val;

Erreur à la ligne 1 (IE): identificateur inconnu
Erreur (Mozilla): missing name after . operator
Code Source :
document.[object HTMLFormElement]

Si j'enlève la première ligne l'erreur est: impossible d'affecter à un résultat de fonction.
2 Mars 2005 14:57:08

ceci devrait fonctionner :

eval("formulaire.lastval_" + id + ".value = '" + val + "'");
2 Mars 2005 15:08:11

Oui ça marche merci beaucoup :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS