Focus sur bouton/textbox

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Focus sur bouton/textbox

par mali_67 » 05 mars 2008, 16:43

d'accord donc si j'ai bien compris il me manque juste le parametre hidden je vais essayer :D

par d0m » 05 mars 2008, 16:39

appuieTouche est une fonction qui marche pour tous les champs textes.

1.
Pour savoir quel est le champ texte rempli, il faut donc un premier paramètre numTexte (ici 1 par exemple pour le premier champ texte)
Ce paramètre va servir à changer la valeur du champ hidden. Je n'est pas mis cette ligne, tu pourras le faire très bien toi même.

Le deuxième paramètre formulaire c'est une habitude de ma part. Il va falloir dans la fonction valider le formulaire, donc autant le passer en paramètre dans la fonction (this.form). donc au lieu d'utiliser Form1.submit() ça utilise formulaire.submit() qui revient au même. L'avantage est que si tu changes le nom de ton formulaire html, ça marchera quand même.

2.
en fouillant un peu (j'ai pas tout vérifié non plus), certains utilisent les 2 codes ascii 10 et 13 pour la touche entrée.

par mali_67 » 05 mars 2008, 16:25

1. je ne sais pas se que je dois mettre ici
onKeyDown="appuieTouche(1,this.Form1);"
a la place du 1 je dois mettre 'Text1'?

2. dans la fonction javascript
je comprend pas if((touche==10) || (touche==13)){
formulaire.submit();
}
je sais juste que touche == 13 est la touche entrer mais la 10 je ne sais pas a quoi elle correspond n'y a quoi elle sert
et je comprend pas nonplus quece que formulaire.submit();
peutre je doit mettre Form1.submit()

par d0m » 05 mars 2008, 16:08

Effectivement c'est comme ça.

Mais avec un seul formulaire, il faut obligatoirement utiliser du javascript en interceptant la touche entrée.

L'idée est que lorsqu'on est sur un champ texte et qu'on appuie sur entrée,
ce n'est pas le bouton qui est utilisé mais le formulaire soumis directement comme si on avait appuyé sur n'importe quel bouton submit.

Il va donc falloir savoir sur lequel de tes champs texte tu étais lorsque le formulaire a été soumis.

Tu peux mettre un champ caché initialisé à 0 dans ce formulaire :

Code : Tout sélectionner

<INPUT TYPE="hidden" NAME="quel_champ_texte" VALUE="0">
la fonction javascript d'interception de touche, avant de soumettre le formulaire, doit changer la valeur de ce champ caché par le numero du champ texte qu'on vient de remplir.

Et dans ton code PHP de traitement, tu dois tester avant tout si la valeur de ce champ caché est supérieur à 0.
Si c'est le cas c'est qu'on vient d'appuyer sur la touche entrée et tu dois suivant la valeur i du champ faire le même traitement que si tu avais appuyé sur le bouton submit i.

Sinon que ne comprends tu pas dans la fonction javascript?

par mali_67 » 05 mars 2008, 15:14

il n'y a pas d'erreur en faite il n'y a rien qui change le focus reste juste sur le premier bouton de mon formulaire, pas fait d'alert ou autre
je comprend pas bien le code :(

regarder se qu'on vien de m'envoyer
http://fashion.hosmoz.net/post/2006/10/ ... laire-HTML
c pas vrai? :?

par d0m » 05 mars 2008, 12:44

C'est à dire? quels sont les erreurs javascript? as tu mis des alert() pour voir si les conditions sont remplis, etc ?

par mali_67 » 05 mars 2008, 12:41

:( sa ne fonction j'ai peut-etre mal utilisier, j'ai fait comme ta ecrit juste sur ma premiere textbox pour voir mais sa ne fontionne pas

par d0m » 05 mars 2008, 12:19

En utilisant du javascript, il faut intercepter l'événement de la touche Entrée lorsque tu es sur un champ texte et soumettre le formulaire :
<input name='Text_1' type='Text' onKeyDown="appuieTouche(1,this.form);"/>
et la fonction javascript :

Code : Tout sélectionner

appuieTouche(numTexte,formulaire){ //vérification de la touche enfoncée par son code ascii var touche = event.keyCode; if((touche==10) || (touche==13)){ formulaire.submit(); } }
Si tu as un seul formulaire pour tout, il faut également préciser (par un champ hidden par exemple contenant le numéro du groupe) quel champ vient d'être rempli.

par mali_67 » 05 mars 2008, 12:06

Alors a se que j'ai compris il vaut mieu utiliser du javascript?
mais je ne sais quand même pas comment faire je vais deja essayer de rajouter des formulaire
j'éspere que sa va marché :?

JE VIEN DE TESTER si je mets plusieur formulaire ma page ne fonctionne plus trés bien

par Ryle » 05 mars 2008, 12:00

@mali_67 : effectivement, les formulaires ne doivent pas (ne peuven pas d'ailleurs) être imbriqués. Chaque formulaire ouvert doit être fermé avant de passer aux suivants afin que leurs inputs ne soient pas mélangés.
Par ailleurs, ils ne doivent pas être placés n'importe où dans ton tableau. Ainsi, tu ne peux pas (tout du moins ne devrais pas) en glisser entre une balise <table> et une balise <tr> ou entre <tr> et <th>/<td>... Du coup il ne faut pas que les champs du formulaire se trouvent dans plusieurs cellules...

@d0m : euh.. oui... certes.. on doit pouvoir faire ça qu'avec du html... mais entre 20 formulaires dans un code qui sera illisible et difficilement maintenable ou une bête fonction javascript de 3 lignes qui soumettra les données correctement en fonction du bouton cliqué, j'ai tendance à négliger les 4 ou 5 parano du javascript qui viendraient sur mon site ;) (et avec l'essort d'Ajax, la proportion de gens et de navigateurs qui n'utilisent pas js est plus que négligeable... je sais, c'est mal, mais quand même... :))

par mali_67 » 05 mars 2008, 11:49

une petite question encor mon formulaire principale
le <form name='Form1' method="POST" action="Accueil.php?page=<?php echo $page?>" >
je doit le fermer avant d'ouvrir les autre ou bien je laisse tel quel du genre
<form name='Form1' method="POST" action="Accueil.php?page=<?php echo $page?>" >
........
.......
<form name="form_plus_moins_1" method="POST" action="Accueil.php?page=<?php echo $page?>" > 
  <th>Partenaire<br><input name='plus_1' type='Submit' value="+">&nbsp;<input name='moins_1' type='Submit' value="-"><br><br> 
</form>
........
........
</form>

par d0m » 05 mars 2008, 11:30

Dans ce cas, tu peux carrément faire un formulaire pour le bouton + et -
et un autre pour seulement le champ texte et le bouton Go
<form name="form_plus_moins_1" method="POST" action="Accueil.php?page=<?php echo $page?>" >
  <th>Partenaire<br><input name='plus_1' type='Submit' value="+">&nbsp;<input name='moins_1' type='Submit' value="-"><br><br>
</form>
<form name="form_go_1" method="POST" action="Accueil.php?page=<?php echo $page?>" >
  <input name='Text_1' type='Text'/>&nbsp;<input id ="un" name='go_1' type='Submit' value="GO"></th>
</form>
Bien sur il va falloir adapter un peu ton code PHP de traitement qui va avec mais ça résoudra ton problème sans passer par du javascript et sera plus accessible.

par mali_67 » 05 mars 2008, 11:17

sa fonctionne pas tout a fait comme prevu(le focus ce place sur le bouton +),
et je ne crois pas pouvoir utiliser cette méthode car lorsque j'ai mis les 7 formulaire différent et que j'ai tester, la fonctionnaliter de ma page étais chambouler (certaine fonction ne marche plus) :?

par d0m » 05 mars 2008, 11:04

Il suffit d'enlever ton formulaire
<form name='Form1' method="POST" action="Accueil.php?page=<?php echo $page?>" >
et de placer un formulaire de même type autour de chacun de tes groupe en pranant soin de nommer tes formulaire différemment, par exmple avec un numéro ou le nom de groupe.

Une bonne idée pour y voir plus clair lors de ton codage est de nommer test boutons submit avec un nom plus explicite :
<form name="form_1" method="POST" action="Accueil.php?page=<?php echo $page?>" >
  <th>Partenaire<br><input name='plus_1' type='Submit' value="+">&nbsp;<input name='moins_1' type='Submit' value="-"><br><br>
  <input name='Text_1' type='Text'/>&nbsp;<input id ="un" name='go_1' type='Submit' value="GO"></th>
</form>
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Javascript, AJAX".
C'est pas du javascript, c'est plutôt du html.

par Ryle » 05 mars 2008, 10:53

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Javascript, AJAX".