Ecrire dans un input text via un input button

Mammouth du PHP | 19672 Messages

21 oct. 2007, 11:29

Bien :)

Maintenant, que faut-il faire ?
-1- récupérer la valeur du bouton qui a été cliqué;
-2- insérer cette valeur dans un des champs.

Donc décompose le problème :
- Comment vas-tu définir dans quel champ tu devras insérer la donnée récupérée ? (je te préviens qu'il va falloir créer une fonction comprenant au moins un paramètre)

Je te laisse penser et analyser un peu tout ça, je dois m'absenter. Tu as tous les éléments nécessaires à la résolution de ton problème. Sois toujours logique, ce sera la clé ;)
Je repasserai en fin d'après-midi.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 351 Messages

21 oct. 2007, 12:15

Donc, j'ai essayer cela :
function setText(element) 
{ 
	document.getElementById('checknum1'+element.id).value = element.value; 
} 

<form name='loterie'>
		 <input type='button' value='01' onclick='setText(this)'><input type='button' value='02' onclick='setText(this)'><input type='button' value='03' onclick='setText(this)'><input type='button' value='04' onclick='setText(this)'><input type='button' value='05' onclick='setText(this)'><input type='button' value='06' onclick='setText(this)'><input type='button' value='07' onclick='setText(this)'><input type='button' value='08' onclick='setText(this)'><input type='button' value='09' onclick='setText(this)'><input type='button' value='10' onclick='setText(this)'><input type='button' value='11' onclick='setText(this)'><input type='button' value='12' onclick='setText(this)'><input type='button' value='13' onclick='setText(this)'><input type='button' value='14' onclick='setText(this)'><input type='button' value='15' onclick='setText(this)'><input type='button' value='16' onclick='setText(this)'><input type='button' value='17' onclick='setText(this)'><input type='button' value='18' onclick='setText(this)'><input type='button' value='19' onclick='setText(this)'><input type='button' value='20' onclick='setText(this)'><input type='button' value='21' onclick='setText(this)'><input type='button' value='22' onclick='setText(this)'><input type='button' value='23' onclick='setText(this)'><input type='button' value='24' onclick='setText(this)'><input type='button' value='25' onclick='setText(this)'><input type='button' value='26' onclick='setText(this)'><input type='button' value='27' onclick='setText(this)'><input type='button' value='28' onclick='setText(this)'><input type='button' value='29' onclick='setText(this)'><input type='button' value='30' onclick='setText(this)'><input type='button' value='31' onclick='setText(this)'><input type='button' value='32' onclick='setText(this)'><input type='button' value='33' onclick='setText(this)'><input type='button' value='34' onclick='setText(this)'><input type='button' value='35' onclick='setText(this)'><input type='button' value='36' onclick='setText(this)'><input type='button' value='37' onclick='setText(this)'><input type='button' value='38' onclick='setText(this)'><input type='button' value='39' onclick='setText(this)'><input type='button' value='40' onclick='setText(this)'><input type='button' value='41' onclick='setText(this)'><input type='button' value='42' onclick='setText(this)'>
		 <br />
		 <input type='text' size='1' maxlength='2' readonly='readonly' name='checknum1' id='checknum1'><input type='text' size='1' maxlength='2' readonly='readonly' name='checknum2' id='checknum2'><input type='text' size='1' maxlength='2' readonly='readonly' name='checknum3' id='checknum3'><input type='text' size='1' maxlength='2' readonly='readonly' name='checknum4' id='checknum4'><input type='text' size='1' maxlength='2' readonly='readonly' name='checknum5' id='checknum5'><br />
		 <input type='text' size='1' maxlength='2' readonly='readonly' name='checknum6' id='checknum6'><input type='text' size='1' maxlength='2' readonly='readonly' name='checknum7' id='checknum7'></form>
Donc là tout les champs vont dans la checknum1, et c'est normal va tu me dire.

Mais je ne vois pas comment javascript va savoir si la checknum1 est deja rempli pour pouvoir mettre le 2ème chiffre dans la checknum2, etc...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2007, 12:27

Cyrano a commencé un travail d'apprentissage je le laisserai poursuivre dans cette voie.
Juste une petite correction du code :
document.getElementById('check'+element.id).value = element.value; 
restriction à 'check' plus une concaténation pour getElementById().

et l'ajout d'un id également pour le bouton (puisque dans mon exemple je l'utilisais :
<input type='button' value='01' onclick='setText(this)' id="num1">

Mais en écrivant je me rend compte que comme tu l'as expliqué au début tu auras un champ texte par bouton... Trop tordu pour convenir. Dans ce cas ce code n'est pas à utiliser tel quel :?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 351 Messages

21 oct. 2007, 12:43

Oui, je viens de réessayer ton code, et effectivement il faudrait un champ text pour chaque button, et ce n'est pas du tout le but recherché.

Mammouth du PHP | 19672 Messages

21 oct. 2007, 17:10

Me revoici :)

kevinf, ce qu'il faut maintenant,c'est de la méthodologie. Pour le code, tu as tous les éléments. Donc tu dois définir comment arriver à la solution.

Je vais illustrer par un classique que j'utilise régulièrement. À des amis qui me disent à l'occasion "Mais moi, je n'y connais rien à l'informatique" je leur réponds volontiers qu'ils font de la programmation tous les jours et je donne l'exemple suivant : tu veux faire des frites. Tu vas naturellement et sans même y réfléchir te poser une succession de questions. La première sera "Est-ce que j'ai des pommes de terre". Pourquoi cette question ? Parce qu'elle n'a comme réponse possible que OUI ou NON. Soit c'est "NON" auquel cas, on oublie les frites et ce sera autre chose, soit c'est "OUI" et on passe à la question suivante : "Est-ce que j'ai un couteau pour les éplucher"... etc, etc...

En clair : un problème global peut être résolu en le découpant en questions basiques. Si tu poses les bonnes questions, tu aboutiras logiquement au bon résultat. Si tu n'obtiens pas le résultat attendu, c'est que tu n'as pas posé les bonnes questions.

J'en reviens donc au début : tu dois utiliser la bonne méthodologie et déterminant quelles sont les questions à poser pour avancer et les traduire ensuite en JavaScript. Je te laisse donc essayer de lister les questions à poser dans l'ordre où elle doivent arriver dans ton programme. Tu vas y arriver si tu es attentif. Oublie le code en tant que tel pour l'instant. Vouloir à tout prix coder tout de suite ne te fera pas avancer plus vite. Si tu comprends exactement la nature du problème à résoudre, sa résolution ne sera plus un problème... ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 351 Messages

21 oct. 2007, 17:55

Daccord, donc la liste de questions serait je pense :

- Clic sur un button, vérification si le checknum1 contient deja quelque chose, si oui, vérifier sur le 2, etc... et si non, et bien rentré la valeur dans le 1 ou le 2, etc...

Je pense que c'est ca, et arriver au bout des 7 input text rempli, activer un bouton submit.

Voila, je pense que c'est ca, mais j'attend ta confirmation.

Mammouth du PHP | 19672 Messages

21 oct. 2007, 19:40

Tu es sur la bonne voie. Il y a encore des amalgames, mais globalement c'est ça. Lorsque tu cliques sur un des boutons, n'importe lequel, ça doit effectuer un appel à une fonction. Cette fonction va vérifier comme tu l'as fort justement déduit quels champs contiennent déjà une valeur pour définir dans lequel inscrire la valeur. Cette fonction ne se limitera pas à faire l'insertion : une fois l'insertion effectuée, il va falloir vérifier si tous les champs ont une valeur : dans ce cas, et dans ce cas seulement, il faudra activer le bouton d'envoi.

Ça, c'est pour la méthode. Maintenant, reste à coder ça. Il faut commencer par concevoir ta fonction. On verra après pour les boutons et l'appel de fonction.

Ta fonction doit inscrire une valeur : d'où vient cette valeur ? Du bouton cliqué. En d'autres termes, c'est un paramètre reçu par la fonction qui définit la valeur.
Ensuite ta fonction doit comporter la liste des champs à remplir sous la forme d'un tableau contenant la liste des identifiants de ces champs. Enfin, il faudra encore que l'identifiant du bouton d'envoi existe aussi dans cette fonction, puisque une fois tous les champs alimentés, il faudra pouvoir identifier le bouton.

Comment va s'organiser ta fonction ?
-1- Récupérer la valeur envoyée;
-2- Boucler sur la liste des champs jusqu'à trouver le premier vide;
-3- insérer la valeur dans ce champ vide;
-4- s'il s'agit du dernier champ, activer le bouton;
-5- sortir de la boucle (même s'il ne s'agit pas du dernier champ vide : en effet, si tu alimentes un champ, il ne sert à rien de continuer à boucler sur les suivants.

Voilà : tu as le schéma, essaye de traduire ça en JavaScript et on corrigera éventuellement.

Il restera un problème à résoudre parce que jusque là, il y a un point non prévu dans ce système : un nombre une fois cliqué et ajouté ne doit plus pouvoir être cliqué à nouveau... je te laisse y réfléchir ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 351 Messages

22 oct. 2007, 16:33

Heu, là je n'arrive plus à suivre, j'ai bien réfléchi mais je ne vois pas quoi faire.

Mammouth du PHP | 19672 Messages

22 oct. 2007, 16:38

Je serais tenté de penser que c'est parce que tu essayes d'aller plus vite que la musique. Avance une étape à la fois.

Commence par construire une fonction avec deux parties :
-1- une partie qui récupère la valeur envoyée
-2- une partie qui va rechercher les valeurs déjà inscrites.

Dans l'immédiat, laisse le reste de coté. Avance un pied après l'autre. Si tu essayes d'avancer les deux pieds à la fois, tu va te casser la figure ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 351 Messages

22 oct. 2007, 16:51

Daccord, donc pour la partie qui récupère ca c'est bon comme je t'ai donné le code plus haut, mais je ne sais pas comment faire pour vérifier si des valeurs sont déjà inscrites.

Mammouth du PHP | 19672 Messages

22 oct. 2007, 21:10

Je t'ai parlé de boucle : tu sais que tu as un nombre fini de champs à vérifier. tu sais également comment ils sont nommés et ces noms se terminent pas un nombre incrémenté à chaque champ.

À partir de là, tu peux à chaque tour de boucle déterminer l'identifiant de chaque champ et en vérifier le contenu : commences-tu à voir quelque chose de plus clair ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 351 Messages

23 oct. 2007, 16:28

Sincèrement, je comprend ce que tu me dit, il n'y pas de soucis pour cela.

Mais mon soucis est le codage en JavaScript, je ne sait pas du tout, et cela m'agace assez d'ailleurs.

En PHP, je pourrais faire cela, mais ce n'est pas possible.

Mammouth du PHP | 19672 Messages

23 oct. 2007, 16:32

Ben commence déjà. Que tu ne connaisses pas bien le vocabulaire JavaScript, ce n'est pas très grave. S'il te manque le nom d'une fonction, on pourra te répondre.

Je pense que tu auras compris que je ne veux pas te filer un code tout fait d'autant que je ne l'ai pas sous là main, il est chez moi : le but, c'est que tu sois autonome, donc que tu y arrives toi-même. Je t'indique donc le chemin à suivre. Pose les bonnes questions et on t'aidera à trouver les bonnes réponses.

Essaye et montre nous : s'il y a des erreurs, ben on corrigera, mais si tu n'as rien à montrer, on ne pourra rien corriger et tu n'avanceras pas très vite :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 351 Messages

23 oct. 2007, 16:50

Tu as raison, alors j'ai essayer cela :

Code : Tout sélectionner

function setText(element) { if ( document.loterie.checknum1.value == '' ) { document.getElementById('checknum1'+element.id).value = element.value; } else { if ( document.loterie.checknum2.value == '' ) { document.getElementById('checknum2'+element.id).value = element.value; } else { return true; } return true; } }
Juste pour les 2 premier checknum donc, et apparement cela fonctionne mais le navigateur indique une erreur javascript quand même, comme quoi getElementById à la valeur Null ou n'est pas un objet.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 oct. 2007, 17:04

Et bien voilà maintenant que tu propose un code on te guidera :wink:

L'erreur vient du faite que tu utilises encore un bout de script du début qui était fait pour "généraliser" la fonction. Mais avant ça tu vas essayer de faire fonctionner simplement.

Dans la fonction getelementById il y a une concaténation pour retrouver un élément or ici tu n'en as pas besoin (tout de suite) tu dois donc te limiter à l'id que tu veux.

Quand tu auras réussi comme ça on repensera la fonction pour la raccourcir et la rendre plus généraliste.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute