Page 1 sur 2

Empecher l'ecriture de chiffre négatif

Posté : 03 mars 2006, 12:24
par budiste
Voila la fonction javascript utilisée :
function pasdenegatif(){
if ((document.getElementById('quant').value)<0){
	alert ('Vous ne pouvez pas mettre de quantité négative.');
	return false;
	}
return true;
}
ensuite j'ai adapté a mon formulaire (post reprenant le code du panier) c'est un panier ou il y a plusieurs produit et leur quantité est QTE_x ou x change pour chaque :
<form name="Formpanier" method="POST" action="index2.php?panier=1&action=1&idpdt=<? echo $cat['IDARTICLE'];?>" onsubmit='return pasdenegatif()'>
...
<input type="text" name="QTE_<? echo $indice;?>" value="<? echo $qtearticle;?>" align="right" size="2" id="quant">
...
</form>
ensuite la fonction javascript est la suivante :
function pasdenegatif(){
return Number(document.getElementById('quant').value)<0
}
mais quand je -60 ou -quelquechose, ca ne fait rien

Posté : 03 mars 2006, 12:37
par budiste
j'ai trouvé cette fonction permettant de savoir si un nombre est un entier superieur a zero :
function IsInteger(nbr){
    return (!isNan(nbr)||(parseInt(nbr,10)<=0));
}
mais je ne vois comment l'utiliser dans mon code

Posté : 03 mars 2006, 12:47
par budiste
sinon j'ai un bouton qui a le code suivant pour valider la modication de la quantité d'un article avec le code suivant :

Code : Tout sélectionner

<a href="#" onclick="Formpanier.submit()"><img src="images/boutonok.gif" border="0">
comment mettre en plus dans le onclick si c possible :

Code : Tout sélectionner

return pasdenegatif();

Posté : 13 mars 2006, 09:45
par budiste
je ne vois pas comment appliquer cette fonction avec mon formulaire

Posté : 13 mars 2006, 09:50
par Cyrano
Ajoute un évènement onsubmit dans la balise form:
<form id="mon_formulaire" action="traitement.php" method="post" onsubmit="return pasdenegatif();">

Posté : 13 mars 2006, 09:59
par budiste
je l'ai mis mais ca ne fonctionne pas dans tous les cas :

ca ne marche que quand il y a qu'une ligne dans le panier et si la valeur est saisie directment si par exemple je met -10 et qu'ensuite je fais plus ou moins ca ne fait rien

Posté : 13 mars 2006, 10:08
par Cyrano
ça voudrait alors dire que s'il y a plusieurs lignes dans le panier, toutes les lignes de quantité ont le même ID ce qui n'est pas conforme et ton script n'en traite qu'une seule. Il faut donc ajouter dynamiquement une numérotation à tes identifiant :

Pour chaque ligne du panier, ton id doit donc devenir quant0, quant1, quant2 etc... : ajoute ensuite un champ caché comportant le nombre de lignes du panier.

Dans ta fonction pasdenegatif(), crée une boucle en commençant par récupérer le nombre de lignes et procèdes ensuite en reconstruisant dynamiquement le bon id :
function pasdenegatif()
{
    var nb = document.getElementById('nblignes').value;
    for(var i = 0; i < nb; i++)
    {
        var quantid = 'quant'+ i;
        if ((document.getElementById(quantid).value)<0)
        {
            alert ('Vous ne pouvez pas mettre de quantité négative.');
            return false;
        }
    }
    return true;
}

Posté : 13 mars 2006, 10:40
par budiste
J'ai bien un indice pour chaque quantité et le champs indice indique le nombre total d'indice +1 donc de produits +1 :
<form name="Formpanier" method="POST" action="index2.php?panier=1&action=1&idpdt=<? echo $cat['IDARTICLE'];?>" onsubmit='return pasdenegatif();'>
...
<input type="text" name="QTE_<? echo $indice;?>" value="<? echo $qtearticle;?>" align="right" size="2" id="quant">
<input name="idart_<? echo $indice;?>" value="<? echo $cat['IDARTICLE'];?>" type="hidden">
...
<input name="indice" value="<? echo $indice;?>" type="hidden">
...
</form>
je vais regarder le code du javascript mais j'y connais vraiment peu de chose

Posté : 13 mars 2006, 10:56
par budiste
Est ce que ca ressemble a quelque chose de bon ? :?
function pasdenegatif()
{
    var indice = document.forms['Formpanier'].elements[indice];
	for(var i = 0; i < indice; i++)
    {
        if ((document.getElementById('quant').value)<0)
        {
            alert ('Vous ne pouvez pas mettre de quantité négative.');
            return false;
        }
    }
    return true;
}

Posté : 13 mars 2006, 11:15
par Cyrano
Non, le problème est au niveau de id="quant" : si tu as plusieurs lignes, tu as x fois le même identifiant: or c'est interdit en HTML : tu ne peux avoir dans une même page qu'une seule fois la même valeur pour un attribut id : donc il faut que lorsque tu génères la page avec le récapitulatif du panier tu crée dynamiquement la valeur de cet attribut id de telle sorte que tu aie des valeurs différentes : avec une inrémentation, tu obtiendras ce que je t'ai indiqué plus tôt : quant0, quant1, quant2, etc...

Dans la boucle qui crée les lignes du panier, tu utilises un pointeur pour l'identifiant, tu peux aussi ajouter un compteur qui ajoute 1 à chaque nouvelle ligne et en fin de formulaire, tu mets cette valeur totale dans un input de type hidden. C'est cette valeur que tu vas récupérer pour pouvoir traiter les différentes lignes de quantités.

Est-ce que tu saisis la manoeuvre ?

Posté : 13 mars 2006, 11:21
par budiste
je comprends pas trop, c'est pas bon ce que j'ai fait ou chaque quantité a pour nom : qte_x
pareil pour l'id du produit ?


pardon j'avais pas vu donc si je mets :
quant<? echo $indice;?>

ca sera bon :?:

Posté : 13 mars 2006, 11:26
par Cyrano
Essaye donc et observe ce que ça donne dans la source html générée, tu verras bien ;)

Posté : 13 mars 2006, 11:30
par budiste
ca me met bien quant1, quant2, quant3

mais ca marche plus tout pour les nombres negatifs, j'ai mis ca comme fonction javascript :
function pasdenegatif()
{
    var indice = document.forms['Formpanier'].elements[indice];
	for(var i = 0; i < indice; i++)
    {
        if ((document.getElementById('quant').value)<0)
        {
            alert ('Vous ne pouvez pas mettre de quantité négative.');
            return false;
        }
    }
    return true;
}

Posté : 13 mars 2006, 11:48
par Cyrano
Évidemment que ça ne marche pas: tu lis mes réponses en diagonale : relis la correction proposée pour ta fonction, tu verras comment je traite chaque ligne en recréant les bons identifiants pour vérifier chaque valeur.

Posté : 13 mars 2006, 12:02
par budiste
Comme ca c'est mieux ?
mais ca ne marche toujours pas, je pense avoir bien tenu compte de tes remarques la, mais je ne sais pas si mon javascript est bon
function pasdenegatif()
{
	var nb = document.forms['Formpanier'].elements[indice].value;
    for(var i = 1; i < nb; i++)
    {
        var quantid = 'quant'+ i;
        if ((document.getElementById(quantid).value)<0)
        {
            alert ('Vous ne pouvez pas mettre de quantité négative.');
            return false;
        }
    }
    return true;
}