Affichage en ajax selon valeur d'une text box

Totala -  
 totala -
Bonjour tout le monde.

Je recherche une aide concernant une fonction que je veux mettre en place sur mon site.

Je souhaiterai qu'un texte apparaisse sur mon site tant que la valeur 1 n'apparait pas dans une textbox.

Pour etre plus concret.

Quelqu'un rempli un formulaire :

un champ nommé "nombre de XXX" avec en face une textbox et un bouton + et - pour incrémenté ou diminuer la valeur (pouvant aller de 0 à 9)
Dans ma page je dis que : tant que le chiffre 3 minimum n'est pas saisi, la personne ne peut pas valider sont formulaire.

Je voudrais donc en AJAX pour eviter le rechargement de la page afficher un texte disant : " IL VOUS RESTE ENCORE 3 XXXX à choisir"

Si la personne saisie 1 alors le texte change de manière dynamique et affiche "IL VOUS RESTE ENCORE 2 XXX à choisir"

j'espère avoir été clair, si ce n'est pas très clair dites le mois je développerai.

Merci d'avance a toute personne pouvant m'apporter de l'aide



A voir également:

16 réponses

carabde Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   30
 
Bonjour,

si j'ai bien compris votre problème, vous voulez afficher un message sans recharger la page. En effet ajaxe peut le faire, vous trouverez plus d'information
dans la page suivante pour mettre à jour une page grâce à un fichier XML

voici la page :
http://apprendre-creer-sites.com/js/ajax_xmlfichier.php
1
adns Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   153
 
Bonjour,

je pense avoir compris le problème et ajax n'est pas nécessaire JavaScript suffit ;)

Un petit exemple :

<script>
var valeurMin = 3; //valeur à récupérer de la base de données

function toInt(x){
return parseInt(x,10); // converti un string en int
}

function getId(id){
return document.getElementById(id); //recupère un élément via son id
}

function update(op, id){
if (op == '+')
getId(id).value  = toInt(getId(id).value) + 1;
if (op == '-')
getId(id).value  = toInt(getId(id).value) - 1;

verification(id);
}

function verification(id){
if (getId(id).value < valeurMin)
getId('message_'+id).innerHTML = "Il vous reste "+(valeurMin-toInt(getId(id).value))+" a acheter";
else
getId('message_'+id).innerHTML = "";
}
</script>


<a href="#" onclick="update('-',1)">-</a> 
<input id="1" value="1" name="quantite" onkeyup="verification(this.id)"> 
<a href="#" onclick="update('+',1);">+</a> 
<span id="message_1"></span>



Adns
1
adns Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   153
 
Bonjour,

ton problème n'est pas clair.
Si j'ai bien compris tu as un champ texte et tu veux vérifier que l'utilisateur est bien saisie 3 fois une certaine valeur dedans ?

Si ton traitement ne concerne que ce que l'utilisateur à saisie l'ajax n'est pas nécessaire du JavaScript suffira.

Adns
0
Totala
 
En fait c'est pour ajouter une fonction sur un site de commande en ligne.
Ca se presente sous la forme d'un tableau multi ligne 5 colonne avec dans chaque case un article et en dessous une textbox avec un + et un - pour augmenter ou diminuer la quantité.

Je souhaite qu'un message apparaissent sur la page ou il serait inscrit "IL VOUS RESTE 1 CABLE de reference XXX a commander".

Une table intermediaire de ma BDD dirait que pour chaque commande 1 cable doit etre commander au minimum pour valider la commande.

Dès que l'utilisateur aurait saisi quantité 1 sur cet article la alors le message disparaitrait.

Si dans la base je dis que le nombre de cable minimum doit etre de 2 alors le message devrait dire "IL VOUS RESTE 2 CABLE de reference XXX a commander" dès lors que l'utilisateur saisirai "1" alors car afficherai de manière dynamique "IL VOUS EN RESTE 1 A COMMANDER".

J'espere avoir été clair.

Merci pour votre aide
0

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

Posez votre question
totala
 
merci beaucoup c'est exactement ce qu'il me fallait
merci encore pour ton aide.
0
totala
 
ai-je la possibilité de bloqué la quantité a 0 avec impossibilité de passer a -1 ?
merci
0
adns Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   153
 
Oui tu peux en modifiant la fonction update


function update(op, id){
if (op == '+')
getId(id).value  = toInt(getId(id).value) + 1;
if (op == '-' && toInt(getId(id).value)>0)
getId(id).value  = toInt(getId(id).value) - 1;

verification(id);
}



Adns
0
totala
 
merci beaucoup. J'ai une dernière question "ultra importante" pour la viabilité du sujet. Lorsque je duplique via une boucle while la partie ci dessous :

<a href="#" onclick="update('-',1)">-</a>  
<input id="1" value="1" name="quantite" onkeyup="verification(this.id)">  
<a href="#" onclick="update('+',1);">+</a>  
<span id="message_1"></span> 


je me retrouve donc avec plusieurs textbox avec a leur coter les + et les -

Cependant lorsque je clique sur les + ca augmente la textbox de la premiere textbox quoi qu'il arrive.

J'ai essayer de modifier l'id (sur la 2eme ligne) en mettant des ID1 , ID2 , IDX mais idem. je rencontre toujours le même problème.

Si tu pouvais m'indiquer l'élément sur lequel il faut mettre un compteur dynamique via mon while pour que cela fonctionne.

Et une petite question qui va surement te paraitre bete mais quand je clique sur + qui se situe en bas de page pour mon cas ca me remonte automatiquement tout en haut de la page. Y a t'il un moyen de garder la position sur la page ?


Je te remercie par avance pour ton aide
0
totala
 
Je viens de me rendre compte que meme lorsque je met juste le id=2
plus rien ne marche. Comment cela se fait il alors qu'on l'envoi en parametres ?

Et est il possible de mettre un id "alphanumérique" ou faut il avoir des ID que numérique ?

Merci.

<input id="2" value="1" name="quantite" onkeyup="verification(this.id)">  
0
adns Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   153
 
un id alphanumérique est tout a fait possible.

Pour que cela fonctionne avec une boucle il faut modifier tout ce qui est en rapport avec l'id (définition et appel de fonction).

Exemple en PHP

for($i=1;$i<10;$i++){
<a href="#" onclick="update('-',$i)">-</a> 
<input id="$i" value="1" name="quantite" onkeyup="verification(this.id)"> 
<a href="#" onclick="update('+',$i);">+</a> 
<span id="message_$i"></span>
}


Ce code n'est pas syntaxiquement correct mais te donne une bonne idée de ce qu'il faut faire.

Pour ce qui est du problème de "remonter d'écran" il devrait disparaitre car lorsque tu appel une fonction en bas de page et qui agis sur un élément tout en haut le focus ce même sut l'input concerné.

Adns
0
totala
 
Merci beaucoup ma boucle fonctionne désormais.

Cependant ca remonte a chaque fois en haut de la page. C'est pénible dans le fonctionnement car lorsque tu es au article tout en bas ca te ramene tout en haut.

- J'ai essayer de mettre le script en bas de page , en haut de page mais idem. il ne refait pas un focus sur l'input concerné.

- Egalement est il possible de mettre le message " il vous reste 3 articles a commander" dès le départ vu que la case est a "0"
Car la pour l'instant il faut cliquer sur + ou sur moins pour que le message apparaissent.

- dernier point après j'arret :) pour passer ma variable "valeurmin" qui elle sera dynamique, ai je le droit de faire cela :

Ou le parametre "5" serait ma valeurmin


<input id="<%response.write id%>" value="0"  name="<%=r("article")%>" onkeyup="verification(this.id,5)"> 
						  




et ensuite de la recuperer comme ci dessous et le commente la ligne "var valeurmin=3"


function verification(id,valeurMin){
if (getId(id).value < valeurMin)
getId('message_'+id).innerHTML = "Il vous reste "+(valeurMin-toInt(getId(id).value))+" à commander";
else
getId('message_'+id).innerHTML = "";
}




Merci encore pour ta précieuse aide.
0
adns Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   153
 
Autant pour moi j'ai mal interprété de problème de retour en haut de page. il s'agit d'un lien cliquable donc le navigateur s'attend à devoir faire quelque chose et la avec le href="#" il s'attend à se rendre à l'ancre "#" qui n'existe pas et donc il remonte en haut de page. solution pour y remédier: forcer l'abandon du lien.

Exemple :


function update(op, id){
if (op == '+')
getId(id).value  = toInt(getId(id).value) + 1;
if (op == '-' && toInt(getId(id).value)>0)
getId(id).value  = toInt(getId(id).value) - 1;

verification(id);
return false; // <= empechera la remonter de page
}

<a href="#" onclick="return update('-',1)">-</a> 



Ta façon de faire pour la valeur minimale est très bien car celle ci te permet d'avoir une valeur minimale par champs et non une globale.

Pour ce qui est du message, si la valeur est toujours à zéro de base il te suffit de pré-remplir le "span" avec le message voulu :

<input id="<%response.write id%>" value="0"  name="<%=r("article")%>" onkeyup="verification(this.id,<%response.write valeurMini%>)">
<span id="message_1">Il vous reste <%response.write valeurMini%> à commander</span> 


Adns
0
totala
 
Bonjour,

Merci pour ces infos.
Ca fonctionne parfaitement.

Maintenant j'en veux toujours plus mais je ne sais pas trop comment cela fonctionne... :)

Comment puis je mettre la cellule textbox en rouge si la valeur est inférieur au min de la base de données

function verification(id,valeurMin){
if (getId(id).value < valeurMin)
getId('message_'+id).innerHTML = "Il vous reste "+(valeurMin-toInt(getId(id).value))+" à commander";

// puis je mettre un truc comme ceci qui fonctionnerai ? 
document.getElementById(getId(id).value).style.backgroundColor = 'red';



else
getId('message_'+id).innerHTML = "";
}
</script>



Merci d'avance
0
adns Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   153
 
Bonsoir,


ce que tu essaies ne peut pas fonctionner car tu essaies de récupérer un élément via son ID en lui donnant comme ID de référence la valeur du champ qui t'intéresses.

la fonction getId que je t'ai fourni renvoi l'élément qui t'intéresses. getId(id).value dans ta fonction te renvoies la valeur du champ courant.

Tu applique donc la bonne fonction pour changer la couleur en rouge mais pas sur le bon élément.

Solution :

getId(id).style.backgroundColor = 'red';


Adns
0
totala
 
Bonjour,

Je viens d'essayer cette fonction mais visiblement il y a un bug car je ne peux ni appuyer sur + ni sur -

:(

j'ai essayer de chercher sur le net, je trouve effectivement la syntaxe que tu m'a indiquée. étrange.

SI tu as une autre idée

merci bcp en tout cas
0
totala
 
Désolé c'est bon tout fonctionne
c'était une erreur de { ] avec plusieurs ligne dans le if :)
0
totala
 
Bonsoir,

Est ce possible de lié javascript & asp

Je recherche une solution à un problème et pour cela j'ai 2 idées.
y en a t-il une de réalisable :

J'ai une variable asp qui se nomme "A" , je la passe en parametre dans la fonction ci dessous.

Je calcul ensuite ma nouvelle valeur de "A".

Je souhaiterai repasser celle valeur "newa" dans la variable ASP pour que lors du prochain appel a ma fonction, ce soit celle nouvelle valeur de A qui soit utilisée et non pas l'ancienne.

La première option est donc de savoir : est possible et si oui comment puis je passer la valeur de newa dans ma variable asp "A"

et sinon j'ai trouver une alternative en passant par une table mysql intermediaire mais cela oblige a ce que je puisse executer la requete placer en dessous de //CAS2 depuis le javascript avec la valeur de ma variable "newa"

J'espère avoir été clair merci pour ton aide


function update(op, id, valeurMin, nbpts, A , numcde){
if (op == '+')
{
getId(id).value  = toInt(getId(id).value) + 1;

var obj = document.getElementById("champ_input")
obj.value=A-nbpts


// calcul de la nouvelle valeur de A
// comment envoyer cette valeur dans la variable A (asp)
var newa = A-nbpts

// CAS2
// comment executer cette requete depuis javascript
// ou newa sera la valeur calculer ci dessus
// et ou numcde sera une valeur reçu en parametre
<% 
xx="update temp set nbpoint='newa' where ncde='numcde'"
set rtemp=conntemp.execute(xx)
%>  
}
0
totala
 
Problème résolu
j'ai contourner le sujet différemment.
Merci quand même :)
0