probleme avec manipulatin de formulaire et js

Eléphanteau du PHP | 36 Messages

30 juin 2006, 08:23

bonjour, j'ai un probleme avec la manipulation des types et valeurs de balises de formulaire
j'arrive pas a passer une balise input du type "password" vers le type "text", pour vous
permettre d'avoir une meilleur visibilite du probleme je vous montre un bout de code

Code : Tout sélectionner

<form name="formulaire" method="post" action="page.html"> <input type="text" name="loging" value="loging" onclick="this.value='';" onselect="this.value='';"> <input type="text" name="password" value="password" onclick="this.value='';this.type='password';" onselect="this.value='';this.type='password';"> <input type="reset" value="effacer" name="reinit"> </form>
avec IE j'ai une erreur au niveau du changement de type.
avec IE et firefox la reinitialisation de formulaire ne redonne pas les types initiaux,
si le type a ete modifie de "text" a "password" il reste a password
Merci pour vos lumieres :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 juin 2006, 22:01

Salut,

Sur un champ de type texte on utilise de préférence onfocus au lieu de onclick.

Pour le plaisir peux tu nous expliquer l'interet de faire ça ?

sinon le "reset" remet à zéro le "contenu" des champs pas le type. Si tu veux ré-initialiser le type ajoute l'action de cgangement de type sur le type "reset".
Jamais testé de changer ces deux types de champ non plus donc effet non garanti.

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

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2006, 07:49

En fait je voulait ecrire a l'interieur des champs par default des balises input le nom des champs pour economiser de l'espace, comme le champs des balises de type password est masque il me fallait trouver un moyen pour les demasquer pour l'application de la methode reset sur le formulaire.
Apres quelques recherche :
- Le changement de type des balises password en txt en JS ne passe pas bien sur IE (provoque une erreur) mais passe bien sur netscape.
- Lorsque on applique la methode onselect sur les balises input password et qu'on clique comme un malade sur la balise cela fait planter netscape

Donc il me faut detecter le navigateur et l'appliquer le changement de type seulement pour les utilisateur de netscape et il ne faut pas utiliser la methode onselect sur les champs de type password.
Ca donne des champs de formulaire dans lesquels apparaissent les nom des champs par default et au reset avec effacement du champs passoword avec un onfocus et des champs text dans un onselect (ou un doubleclick)

Code : Tout sélectionner

<script language="Javascript"> function changertype(objet) { if ((objet.type=="password")&&(window.navigator.appName!="Microsoft Internet Explorer")) objet.type="text"; } </script> <form name="formulaire" method="post" action="page.html"> <input type="text" name="loging" value="loging" onselect="this.value='';" onclick=""> <input type="password" name="password" value="password" onfocus="this.value='';" onclick=""> <input type="reset" value="effacer" name="reinit" onclick="changertype(document.formulaire.password);"> </form>
PS si vous avez des solutions plus efficaces du genre qui s'applique a des formulaire en general plutot qu'a un formulaire je suis preneur

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juil. 2006, 15:50

Ca me parait effectivement très hasardeux comme méthode... j'imagine mal que l'on puisse transformer un champ texte en checkbox à la volée sans que le navigateur ne fasse une attaque :)

A la limite ce que tu pourrais envisager c'est de mette deux champs, un text et un password en masquant le second (style="display:none") et lors du focus sur le champ texte, basculer en le faisant disparaitre et en faisant apparaitre celui protégé en lui collant le focus...

Sinon tu garde la description des champs dehors et tu utilises juste des champs plus petits ;)

Invité
Invité n'ayant pas de compte PHPfrance

03 juil. 2006, 09:33

bonne idee :) ca a l'avantage d'etre plus propre comme approche :)