11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J’utilise Math.min pour récupérer la plus petite valeur des champs d’un formulaire.

Le code :

if ((tota6.value > 0)&&(tota6.value < 12)){
OFFERT.value = 0 ;
}

if ((tota6.value > 11)&&(tota6.value < 24)){
var OOFFERT = Math.min(pu1.value, pu2.value, pu3.value) ;
OFFERT.value = OOFFERT ;
}
else {
OFFERT.value = 0 ;
}


La valeur OFFERT est à 0 tant que tota6 est inférieur à 11.
Quand la valeur tota6 dépasse 11 la valeur de OFFERT devient la plus petite des 3 valeurs de pu1 pu2 et pu3 ; ça fonctionne mais !
Ca fonctionne que quand les 3 valeurs sont rempli, sinon OFFERT reste à 0.
Je voudrais qu’il récupère la valeur de total6 à partir du moment ou une des valeurs pu1 pu2 et pu3 ou la somme de pu1 + pu2, pu2 + pu3 et pu1+ pu3 dépasse 11.

Exemple: pu1=5.10(prix) x 6(nombre) pu2=3.50(prix) x 6(nombre) pu3= champ vide
donc --> tota6=12(6+6) la valeur de OFFERT=3.50(pu2->le plus petit)

J'ai testé ça.

if ((tota6.value > 11)&&(tota6.value < 24)){
var OOFFERT = Math.min((pu1.value)||(pu2.value)||(pu3.value)) ;
OFFERT.value = OOFFERT ;
}
else {
OFFERT.value = 0 ;
}

Ca fonctionne sans remplir les trois champs mais OFFERT prend toujours la valeur de pu1.

Merci d'avance pour votre aide à un débutant en javascript.

Cireultra
Modifié par cireultra (27 Oct 2008 - 11:43)
Bonjour!

Rapidement, comme ça, voici ce qui me vient...

Si un des champs n'est pas renseigné (par exemple pu2), il est peu probable que pu2.value te renvoie une valeur numérique ; il est plus probable que ce soit "undefined". Dans ce cas, tu ne peux pas garantir la valeur de Math.min d'une collection de valeurs dont une est indéfinie...

Dans ton deuxième essai, (pu1.value)||(pu2.value) renvoie un booléen, autrement dit soit "true", soit "false". Là encore, Math.min ne t'est d'aucun secours.

Tu peux déjà débroussailler le terrain avec ces deux pistes :
1. tu vérifies que les champs pu1 et compagnie sont bien renseignés ; sinon, tu te contentes de faire un Math.min sur les champs qui le sont
2. Surtout... transforme tes saisies en nombres Smiley cligne Par exemple, au lieu d'écrire pu1.value+pu2.value, calcule parseFloat(pu1.value)+parseFloat(pu2.value) ; sinon, si tu as par exemple pu1 à 1 et pu2 à 2, pu1.value+pu2.value te renverra la concaténation des chaînes de caractères "1" et "2", autrement dit "12"... et non pas le nombre 3...