Comparaison qui ne fonctionne pas

KaiHo Messages postés 19 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 24 mai 2021 - 28 juil. 2010 à 18:43
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 30 juil. 2010 à 18:06
Bonjour,

Je fais appel à vous parce que je ne suis pas un expert en javascript (qui a dit que je débutais ?) et je sèche sur un problème qui me paraissait pourtant simple à la base.

Voilà, j'ai un formulaire avec un select, un bouton et un champ vers lequel je dirige la sélection du select. Et j'ai deux champs supplémentaires avec les valeurs minimum et maximum que je peux placer.

echo"<select   name='sel' id='sel' class='Liste' onclick='choix(this);' onchange='choix(this);' size=6>
<option>$val1</option>
<option>$val2</option>
<option>$val3</option>
<option>$val4</option>
<option>$val5</option>
<option>$val6</option>
</select>

<select  name='sel2' id='sel2' class='Liste' onclick='choix(this);' onchange='choix(this);' size=6>
<script type='text/javascript'>
var sel=document.getElementById('sel');
var sel2=document.getElementById('sel2');
var saisie=document.getElementById('saisie');
for ( var n=0;n<sel.length;n++)
{
document.writeln('<option>'+(n+1)+'

</option>');
}
</script>
</select>,
<center>
>>' class='Bouton' onclick='ajouter();'>

</center>,

<SCRIPT LANGUAGE='JavaScript'>
var champ1=document.getElementById('champ1');
</SCRIPT>,

<SCRIPT LANGUAGE='JavaScript'>
var val_min=document.getElementById('val_min');
</SCRIPT>

<SCRIPT LANGUAGE='JavaScript'>
var val_max=document.getElementById('val_max');
</SCRIPT>
</center>
";


Pour moi, tout se passe dans la fonction ajouter().

	function ajouter()
{

if ( sel.selectedIndex >=0 )
  			{
if ((sel[sel.selectedIndex].text<val_min.value) || (sel[sel.selectedIndex].text>val_max.value))
{
alert('Aïe');
}
else
{
if (champ1.value=='')
{
champ1.value=sel[sel.selectedIndex].text;
supprime();
}
else
{
saisie.value=champ1.value;
champ1.value=sel[sel.selectedIndex].text;
supprime();
ajout(0);
}
}
}
}


Malheureusement, quelque soit la valeur sélectionnée (sel[sel.selectedIndex].text), j'obtiens mon alerte (aïe).

J'ai bien intercalé une alerte pour vérifier
alert('valeur :'+sel[sel.selectedIndex].text + ' et ' + val_min.value + ' et ' + val_max.value);)

J'obtiens bien les bonnes valeurs.

Qu'est-ce que j'ai manqué ?

Tout le reste de mon script est bon, après de longues heures de boulot, mais là, je sèche !

Merci d'avance !

7 réponses

KaiHo Messages postés 19 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 24 mai 2021
29 juil. 2010 à 14:08
Personne pour m'aider ?
0
KaiHo Messages postés 19 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 24 mai 2021
29 juil. 2010 à 16:04
La persévérance payant, j'ai enfin trouvé l'erreur...

En effet, mes variables (sel[sel.selectedIndex].text, val_min.value et val_max.value) étaient de type "string".

Un petit parseInt(), et le tour est joué.

Ca donne quelque chose du genre
function ajouter()
{
                var sel_number=parseInt(sel[sel.selectedIndex].text);
                var val_min_number=parseInt(val_min.value);
                var val_max_number=parseInt(val_max.value);

if ( sel.selectedIndex >=0 )
  			{
if ((sel_number<val_min_number) || (sel_number>val_min_number))
{
alert('YOUPI !');
}
else
{
if (champ1.value=='')
{
champ1.value=sel[sel.selectedIndex].text;
supprime();
}
else
{
saisie.value=champ1.value;
champ1.value=sel[sel.selectedIndex].text;
supprime();
ajout(0);
}
}
}
}



Merci qui ?
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
29 juil. 2010 à 19:01
Bonjour,
La persévérance payant, j'ai enfin trouvé l'erreur...
comme très souvent !

...effectivement lorsque que l'on veut comparer des nombres il est préférable récupérer les données via le parseInt.
Cela marche avec les String, mais avec des surprises du type "15" est inférieur à "2".

...je ne suis pas un expert en javascript ...
il n'est pas nécessaire de l'être pour pratiquer, mais si je puis me mettre quelques conseils...

- d'abord
<SCRIPT LANGUAGE="JavaScript">
est déprécié
il est préférable de mettre
<script type="text/javascript">

- regroupes les différents passages javascript au même endroit entre les balises SCRIPT, plutôt que de le parsemer dans ton code...le mieux étant un fichier externe de la sorte
<script type="text/javascript" src="function.js"></script>


- concernant ta fonction, fait les récupérations après le test sur le selectedIndex, cela évitera l'erreur si appui sur bouton sans qu'une sélection ne soit faite.
function ajouter() {
  if (sel.selectedIndex >-1) {
    var sel_number     = parseInt(sel[sel.selectedIndex].text);
    var val_min_number = parseInt(val_min.value);
    var val_max_number = parseInt(val_max.value);

    if ((sel_number < val_min_number) || (sel_number > val_min_number)) {
      alert('YOUPI !');
    }
    else {
      if (champ1.value == '') {
        champ1.value = sel[sel.selectedIndex].text;
        supprime();
      }
      else {
        saisie.value = champ1.value;
        champ1.value = sel[sel.selectedIndex].text;
        supprime();
        ajout(0);
      }
    }
  }
}


pourquoi écrire cela dans ton code
for (var n = 0; n < sel.length; n++) {
  document.writeln('<option>' + (n + 1) + '

</option>');
}
et ne pas le faire directement en PHP ?

bonne continuation !!
;O)
0
KaiHo Messages postés 19 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 24 mai 2021
30 juil. 2010 à 13:21
Merci pour tes conseils.

J'ai donc commencé par modifier
<script type="text/javascript">

Mais lorsque j'ai voulu mettre tout le javascript dans un fichier, plus rien ne fonctionne.

<SCRIPT language='text/Javascript' src='../function.js'></SCRIPT>


J'ai donc créé un fichier "function.js" avec tout mon code à l'intérieur, mais rien ne fonctionne.

J'aurais pu oublier quelque chose ?
0

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

Posez votre question
KaiHo Messages postés 19 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 24 mai 2021
30 juil. 2010 à 13:23
Ah, et pour ça
for (var n = 0; n < sel.length; n++) {
  document.writeln('<option>' + (n + 1) + '

</option>');
}
C'est juste que j'ai pris le code sur le site et je n'ai modifié que le strict nécessaire !
0
KaiHo Messages postés 19 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 24 mai 2021
30 juil. 2010 à 13:34
Alors là, moi, je ne comprends plus rien
<script type='javascript'>
Fonctionne

<script type='text/javascript'>
ne fonctionne pas


Une explication ? Pour moi, ça ne change évidemment rien, mais bon !
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
30 juil. 2010 à 18:06
Bonjour,
quelque recommandations
un fichier javascript, .js, ne doit contenir que du code, pas de balise SCRIPT.

Il existe plusieurs son de cloches, au figuré bien sûr, pour le positionnement de l'inclusion du fichier JS via les balises SCRIPT.

Dans ton cas, si j'ai bien suivi tu initialises des variables qui représentent les objets auxquels tu accèdes, la meilleur position serait juste avant la balise de fin de BODY, comme cela tu ne généreras pas d'erreur du type n'est pas un objet ou est null.

Quant au dernier problème que tu rencontres, cela me parle, mais ne l'ai pas personnellement reproduit pour comprendre le pourquoi, peut être un problème avec le DOCTYPE et qui plus est fonction du navigateur.

Quoiqu'il arrive privilégies le text/javascript.

Dernier point lorsque tu écris src='../function.js', cela veut dire que le fichier n'est pas dans le même répertoire mais dans le répertoire parent.

Pour vraiment finir je te mets 2 liens
Comment bien coder en Javascript ?
et Bonnes pratiques javascript

il en existe sûrement bien d'autres...

;O)
0
Rejoignez-nous