Aller au contenu

Demande aide pour finaliser une fonction javascript


trodat

Sujets conseillés

Bonjour,

Nouveau venu sur le hub, je remercie par avance toute personne pouvant m'aider à résoudre un petit souci de fonction javascript.

Dans le cadre du developpement d'une boutique ecommerce, je tente de mettre en place coté client, car coté serveur tous les contrôles sont faits en PHP et fonctionnent très bien, une verification de la quantité saisie et de la quantité disponible en stock pour tel ou tel article.

Un champ select contient les criteres de l'article. Je récupere la valeur du stock pour l'injecter dans un champs, c'est a dire sa "value", puis lorsque le client saisie une quantité dans le champs quantité, je compare la quantité saisie avec la valeur du stock disponible via la "value" du champs qui reçoit la valeur du stock.

Mon souci est que ça ne fonctionne pas trop bien et que meme si la quantité saisie est inférieure au stock disponible, qui est recuperé donc dans un champs de type input type="text" , le message d'alerte apaprait quand meme.

j'ai évidemment conscience que rien n'oblige personne à me dépanner aussi j'esperes que ce message ne contrevient pas aux régles du forum.

Pour plus de clarté, voici un extrait du code qui est fonctionnel en le copiant collant dans une simple page html :

CODE
<script type='text/javascript'>

function validercritere16(){

if(document.forms['aj16'].critere.value == "") {

alert('Merci de saisir un critère pour article avant de l\'ajouter à votre panier.\nEx:Choisir une couleur, une taille etc.');

return false;

}

else {

if(confirm('Ajouter article à votre panier ?')){return true;} else {return false;}

}

}

function verif_stock() {

var st;

var qu;

st=document.forms['aj16'].stockcprd.value;

qu=document.forms['aj16'].qte.value;

if(qu>st) {

alert("La quantité demandée, "+ qu +" unités, est supérieure au stock disponible qui est de "+ st +" unités pour article\nLa quantité maximale disponible pour article vous a donc été attribuée mais vous pouvez toujours modifier la quantité selon vos souhaits.");

document.forms['aj16'].qte.value=st;

}

}

</script>

<form method="post" action="" id="aj16" onsubmit="return validercritere16()" >

<div>

<input type="hidden" name="id" value="16" />

<script type="text/javascript">

function preparestock16() {

var a;

a=document.forms['aj16'].critere.value.split('|');

if (a[2] !== undefined) {

document.forms['aj16'].stockcprd.value=a[2];

}

}

</script><p class="nmnp"><label>Options :</label></p>

<p><select name="options" onchange="preparestock16()">

<option value="">-- Selectionnez un critère --</option>

<option value="5|4|10">Rouge · XL</option>

<option value="5|6|10">Rouge · S</option>

<option value="5|9|5">Rouge · M</option>

<option value="7|4|20">Rose · XL</option>

<option value="7|6|30">Rose · S</option>

<option value="7|9|1">Rose · M</option>

</select></p>

<p>

<label>En Stock : <input type="texte" name="stockcprd" value="--" size="5" readonly="readonly" style="color:green;border:none" /></label></p>

<p class="nmnp"><label class="labelcritere">Quantité :</label>

<input type="text" onkeyup="verif_stock()" size="3" name="qte" value="1" maxlength="2" /></p>

<p>

<input type="submit" value="Acheter" class="client ajouter" /></p>

</div>

</form>

</div>

De nouveau merci aux personnes suceptibles de m'aider à faire en sorte que la vérification ne fonctionne que dans le cas ou la quantité saisie est supérieure au stock disponible.

Merci.

Trodat.

Modifié par Dan
Lien vers le commentaire
Partager sur d’autres sites

J'ai pas pris le temps de lire tout le code :blushing: mais à tout hasard : Les valeurs ne serait pas des string ? Ce qui expliquerait que la comparaison ne fonctionne pas. Faites un typeof pour vérifier

et un parseFloat pour les convertir en nombre le cas échéant.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Je vais tenter cela. Il me semble que ça puisse venir de là.

Merci.

edit :

Cela venait bien du type de variable. Elles n'étaient pas numériques.

Je pensais pourtant que javascript pouvait auto-determiner le type de variable mais pas toujours apparement.

En tout cas Merci Ifmy.

Bon week à tous les Hubnautes.

Modifié par trodat
Lien vers le commentaire
Partager sur d’autres sites

Effectivement, javascript est un langage faiblement typé, ce qui signifie qu'en cas de besoin, il sait modifier le type d'une variable.

Par exemple, les champs d'un formulaires sont de type "string", et si tu déclares une variable de type number (var variable = new Number) à laquelle tu affectes la valeur d'un champ de formulaire, ta variable devrait se transformer toute seule en ... "string".

Dans ton cas, tu demandes une comparaison qu'il sait faire, donc ça ne le dérange pas, même si le résultat que tu as demandé n'est pas celui que tu pensais

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...