2009-12-18 4 views
1

Bonjour à tous, J'ai récemment demandé this question et j'ai abandonné l'idée 'remplacer l'idée'. J'ai décidé d'essayer une autre approche ..Activer ou désactiver l'élément d'étiquette en javascript

J'ai rendu l'arrière-plan de mon champ de mot de passe transparent et j'ai placé l'élément <label> derrière le mot de passe, de sorte qu'il semble faire partie du champ de mot de passe. Maintenant, je l'ai écrit une fonction standard pour l'élément basculant comme celui-ci:

function togglePassword(obj) { 
        var el = document.getElementById(obj); 
        if (el.style.display != 'none') { 
         el.style.display = 'none'; 
        } 
        else { 
         el.style.display = ''; 
        } 
       } 

je déclenche cette fonction onforus et onblur du champ de mot de passe afin que l'étiquette disparaît lorsque le champ de mot de passe est concentré, mais j'ai des problèmes avec onblur, car après type I mot de passe et appuyez sur TAB sur le qui me prend pour connecter le bouton soumettre puis l'élément <label> apparaît avec la valeur de mot de passe à nouveau et son mélangé avec mot de passe tapé. image http://i49.tinypic.com/23s7ypc.png Voici l'image de cela, alors j'ai essayé de trouver quelque chose de nouveau. Malheureusement, ce code ne fonctionne pas .. quelqu'un peut me pointer vers où ai-je fait une erreur? Donc, ce second code devrait vérifier si le champ de mot de passe est emtpy ou pas, si ce n'est pas vide, puis continuer à toogle si ce n'est pas basculer juste cacher la valeur du mot de passe. Aide: D merci

Répondre

2

Essayez cela, il travaillera

function togglePassword(obj) { 
var el = document.getElementById(obj); 
var input_el = document.getElementById('password_field'); 
if((input_el.style.display == ‘none’) || ((input_el.style.display=='') && (input_el.offsetWidth==0))){ 
el.style.display = 'block'; 
} else { 
el.style.display = ‘none’; 
} 
} 
           } 
+0

Cela fonctionne effectivement :-) – ant

+0

Une chose de plus .. Je mets la fonction togglePassword onblur et onfocus dans password_field iput. Maintenant, quand je clique sur le champ vide le mot de passe disparaît et fonctionne très bien, mais quand je clique sur le mot de passe lui-même (

+0

Essayez de mettre le champ lable et le mot de passe à la fois dans un Div et donner un identifiant pour cela. En donnant comme ceci vous pouvez basculer seulement champ ou total lable et le champ – valli

-3

HI,

essayer d'utiliser une bibliothèque comme JQuery. ils sont vraiment utiles dans des tâches aussi simples, et peuvent également gérer des tâches assez complexes ...

le point important est: une telle chose comme cacher/montrer est déjà résolu cent fois. ne pas réinventer la roue ;-)

+0

oui mais qu'en est-champ de mot de passe, si je montre le mot de passe valeur du champ le mot de passe sera masqué, qu'en est-il? J'ai donc besoin de changer le type de champ ou de faire quelque chose de plus .. "simple" – ant

1

Un jour, je vais contourner d'écrire les détails de cette technique, mais une mise en œuvre de travail a été assis dans mon répertoire tmp pour les six derniers mois: http://dorward.me.uk/tmp/label-work/example.html

+0

Vous m'avez donné ce lien avant, juste je ne pouvais pas le trouver, mais j'ai posté la question précédente avant d'espérer que vous répondiez, merci d'abord tout, deuxième ... est-ce possible de faire sans jquery? Parce que j'utilise un prototype pour ce projet et que je viens d'entrer dans le milieu de tout, j'essaie de faire tout ce qui a besoin de javascript en écrivant javascript. merci – ant

+0

Bien sûr. Vous avez juste besoin de porter la logique. (Qui est l'ajout de la classe pour masquer l'étiquette obtient le focus, et onload si le champ a une valeur non vide, et l'enlever onblur mais seulement si le champ a une valeur vide) – Quentin

+0

Eh bien dit .. c'est exactement ce que J'essayais de faire, voir ma tentative de "script" ci-dessus, où je me suis trompé. Peut-être erreur # 1, j'ai essayé de cacher l'étiquette sur le terrain.au lieu de la fonction de mise au point de l'étiquette – ant

0

Je n'ai pas tout à fait comprendre l'exigence, mais vous devez vérifier dans votre fonction si vous faites un flou sur l'action focu et réagir à ce sujet.

Peut-être quelque chose comme ça:

<script type="text/javascript"> 
function togglePassword(alwaysVisible, labelId, pwdId){ 
var label=document.getElementById(labelId); 
if (alwaysVisible){ 
    label.style.display=""; 
} else { 
    var pwd=document.getElementById(pwdId); 
    label.style.display= (pwd.value.length==0)?"":"none"; 
} 
} 
</script> 

....

<form> 
<label for="pwd" id="labelPwd">Type your password&nbsp;:&nbsp;</label> 
<input name="pwd" id="pwd" onfocus="togglePassword(true, 'labelPwd', 'pwd')" onblur="togglePassword(false , 'labelPwd', 'pwd')" type="password"> 

<input type="submit">                
</form> 
Questions connexes