Pb jvs focus() non prise en compte

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 : Pb jvs focus() non prise en compte

par cagou2 » 02 avr. 2007, 07:39

houhou le revenant que voilà

Tout d'abord merci Dominic de ton conseil et vraiment désolé du retard à la réponse mais l'urgence m'a complètement rattrapé sur ce projet. :oops:
Ton idée de on onkeyup était séduisante. Du coup je l'ai mis en place et cela a bien fonctionné. Et puis finalement, mon donneur d'ordre et moi avons décidé une simplification. Plus de jvs (les contrôles PHP suffisaient), du coup ce post est pour la gloire... :roll:
N'empêche que c'est rageant cette "instabilité" du focus.

par Dominic » 10 févr. 2007, 18:22

je pense avoir trouvé une solution
utiliser OnKeyUp au lieu de Onblur la vérif se fait ainsi à chaque caractère saisi et est immédiatement sanctionné et le focus se met bien sur le champ considéré
ça marche aussi avec OnMouseOut mais l'utilisateur peut déplacer la souris du champ avant d'avoir saisi quoique ce soit ou en cours de saisie.

Je pense que le Onblur s'exécute mais est immédiatement annulé car l'identifiant devient en fait le champ suivant. lacune de getElementById()
si cela peut t'être utile salutations amicales.

<label id="lab_login" style="color:black;"> Login <input type="text" id="login" name="login" value="" size=5 maxlength=5 OnKeyUp="VerifSaisie(this.id,this.value,'login','rech')"/></label>
<label id="lab_nom" style="color:black;"> Nom <input type="text" id="nom" name="nom" value="" maxlength=30 OnKeyUp="VerifSaisie(this.id,this.value,'nom','rech')"/></label>
<label id="lab_prenom" style="color:black;"> Prénom <input type="text" id="prenom" name="prenom" value="" maxlength=30 OnKeyUp="VerifSaisie(this.id,this.value,'p

par cagou2 » 09 févr. 2007, 16:41

.encore merci pour ton aide Dominic
..on avance ...
clairement ce n'est pas le this.id qui passe une mauvaise valeur j'ai mis un alert(champ) et c'est toujours le bon qui remonte pas celui du champ suivant.
Par contre, en suivant ton conseil j'obtiens systématiquement le msg

Code : Tout sélectionner

document.admin_utilisateur has no properties
Du coup j'ai écrit en dur dans le jvs le chemin : document.admin_utilisateur .login.focus() pour tester et là ça passe.
Donc il y a un pb de chemin et il est faché avec le getElementById ?
En clair, il faut que je lui indique le chemin en dur mais comment faire pour derrière lancer la fonction focus() sans le getElementById ?? :shock: )
la concaténation de variables ne marche pas ... logique !

par Dominic » 09 févr. 2007, 12:45

je crois avoir compris le problème
le contrôle
document.getElementById(champ).focus();
s'active après que tu as changé de champ (par onblur) et c'est ce champ suivant en fait qui devient la cible du contrôle
il faudrait changer la syntaxe des contrôles

VerifSaisie(this.id, etc.. par
VerifSaisie(document.admin_utilisateur.id, etc..
VerifSaisie(document.admin_utilisateur.nom etc..

ainsi c'est le champ clairement désigné sur le quel se mettrait le focus

par cagou2 » 09 févr. 2007, 11:40

Salut Dominic,

Merci de t'intéresser à mon pb.
Par acquis de conscience j'ai essayé et sans succès mais cela ne pouvait pas être ça : en effet mon instruction

Code : Tout sélectionner

document.getElementById(champ).value="";
est bien prise en compte. Le champ est vidé dc la variable champ est connu.

et je bloque toujours malgré de nouvelles recherches ...

par Dominic » 09 févr. 2007, 10:07

a vue de nez var champ n'étant pas défini au début de ta fonction cette instruction est ignorée
essaies don en ajoutant var champ = champ; au début
ouvar champ = 'champ' à voir

Pb jvs focus() non prise en compte

par cagou2 » 09 févr. 2007, 08:57

Bonjour,

Je finis de m'arracher les cheveux sur un jvs de contrôle de saisie. Le voici (je vous épargne le détail de tous les ctrl...)

Code : Tout sélectionner

function VerifSaisie(champ,valeur,type_champ,select){ var msg = '' ; var champ_label = 'lab_'+champ ; var champ_msg = champ+'_err'; //début des contrôles : caractères spéciaux (* et % sont acceptés dans le cas d'un champ utilisé pour une recherche) if (select=='select') { var exp=new RegExp("[^a-zA-Z0-9\*\%]","g"); if (exp.test(valeur) ) {msg='Les caractères spéciaux sauf * et % sont interdits' ; } } else { var exp=new RegExp("[^a-zA-Z0-9]","g"); if (exp.test(valeur) ) {msg='Les caractères spéciaux sont interdits' ; } } // tout plein d'autres ctrl ... // Contrôles finis affichage des messages d'alerte si la variable msg est non vide if (msg != '') { document.getElementById(champ_label).style.color='red' ; document.getElementById(champ_msg).style.visibility='visible' ; document.getElementById(champ_msg).value=msg ; document.getElementById(champ).value=""; document.getElementById(champ).focus(); } else { document.getElementById(champ_label).style.color='black' ; document.getElementById(champ_msg).style.visibility='hidden' ; document.getElementById(champ_msg).value="" ; }
Tout se passe très bien (aucune erreur jvs) mais la dernière instruction redonnant le focus au champ contrôlé n'est pas prise en compte. C'est le champ suivant qui l'a comme si de rien. C'est valable sur FF comme IE :shock:

Voici le code HTML (allégé) : à savoir que mon form est dans une DIV est-ce que cela peut jouer ?

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="fr"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <head> <title>SIMABO </title> <link rel="stylesheet" href="style.css" type="text/css"> <!--[if IE]> <link rel="stylesheet" href="iestyle.css" type="text/css" /> <![endif]--> <? if (file_exists("./UtilFonctionsJvs.js")) { ?> <script type="text/javascript" src="UtilFonctionsJvs.js"></script> <?}?> </head> <body> <div class="pagestandard"> <form id="admin_utilisateur" method="post" action="AdminUtilisateurs.php"> <fieldset > <legend> Rechercher un utilisateur </legend> <label id="lab_login" style="color:black;"> Login <input type="text" id="login" name="login" value="" size=5 maxlength=5 onblur="VerifSaisie(this.id,this.value,'login','rech')"/></label> <label id="lab_nom" style="color:black;"> Nom <input type="text" id="nom" name="nom" value="" maxlength=30 onblur="VerifSaisie(this.id,this.value,'nom','rech')"/></label> <label id="lab_prenom" style="color:black;"> Prénom <input type="text" id="prenom" name="prenom" value="" maxlength=30 onblur="VerifSaisie(this.id,this.value,'prenom','rech')"/></label> <br/> <!-- On charge les champs cachés pour les msg d'erreurs de saisies --> <input id="login_err" value="" readonly="disabled" style="visibility:hidden; color:red; border-style:none; background-color:white;"/> <input id="nom_err" value="" disabled="disabled" style="visibility:hidden; color:red; border-style:none; background-color:white;"/> <input id="prenom_err" value="" disabled="disabled" style="visibility:hidden; color:red; border-style:none; background-color:white;"/> <br/> <input type="submit" name="submit" value="Rechercher" /> <input type="reset" name="submit" value="Effacer"/> </fieldset> </form> </div> </div> </body> </html>
Est-ce que qlq a rencontré un pb similaire ou voit LE truc absolument évident à côté duquel je suis passé ? Si oui je l'aime déjà :wink: