2010-07-14 4 views
3

J'ai un formulaire avec des étiquettes et des champs de saisie. Lorsque je clique sur un champ, je veux styliser le champ avec CSS et afficher des informations sur les exigences d'entrée dans un div sous l'étiquette.

La mise au point() et flou() événements ajoutent les classes pour le style le terrain très bien, mais en essayant de montrer/cacher les divs d'information déclenche les méthodes sur tous les champs en utilisant $ (this) .siblings()

$(".input-field").focus(function() { 
    $(this).addClass("input-field-focus"); 
    $(this).siblings(".label-info").show(); 
    return false; 
}); 
$(".input-field").blur(function() { 
    $(this).removeClass("input-field-focus"); 
    $(this).siblings(".label-info").hide(); 
    return false; 
}); 


<label for="login"> 
    User name:<br /> 
    <div class="label-info">minimum 6 chararcters: letters, numbers and symbols - _ . @</div> 
    <input type="text" name="login" class="input-field" value="<?php echo (isset($_POST['login'])) ? $_POST['login'] : ""; ?>"> 
</label>  
+0

Votre code fonctionne pour moi: http://jsbin.com/obuzi3 –

+0

Salut Félix, il ne fonctionne pas avec 2 champs, montre/cache les deux? – FFish

Répondre

2

Ok, maintenant je vois le problème. Votre balise HTML est incorrecte. Vous ne pouvez pas avoir un élément div intérieur label, utilisez span à la place:

<label for="login">User name: 
    <br /> 
    <span class="label-info">minimum 6 chararcters: letters, numbers and symbols - _ . @</span> 
    <br /> 
    <input type="text" name="login" class="input-field" value=""> 
</label> 

ou envelopper tout le bloc dans un propre div:

<div> 
    <label for="login">User name:</label> 
    <div class="label-info">minimum 6 chararcters: letters, numbers and symbols - _ . @</siv> 
    <input type="text" name="login" class="input-field" value=""> 
</div> 

Sinon, le navigateur corrigera le balisage produisant ceci:

<label for="login"> 
    User name:<br /> 
</label> 
<div class="label-info">minimum 6 chararcters: letters, numbers and symbols - _ . @</div> 
<input type="text" name="login" class="input-field" value=""> 

Donc, tous les label-info et l'élément d'entrée seront au même niveau et donc les frères et sœurs les uns aux autres.

+0

Félix, j'ai un exemple avec 2 champs et votre correction ici: http://jsfiddle.net/7wxZy/ Mais toujours le même problème ?? – FFish

+0

@FFish: Non, vous l'avez fait mal. Changez le 'div' en' span' mais gardez le 'label' autour de lui ** ou ** gardez le' div' et placez un autre 'div' autour du' label', 'div' et' input' . Il vous manque ce "wrapping" 'div' dans votre exemple. Il devrait être plus comme ceci: http://jsfiddle.net/7wxZy/6/ –

+0

Désolé de lire un peu mieux, vous avez raison .. Merci Felix !! – FFish

2

EDIT:

en fonction de votre code mis à jour, vous devez utiliser .prev() au lieu de .siblings().

$(".input-field").focus(function() { 
    $(this).addClass("input-field-focus"); 
    $(this).prev(".label-info").show(); 
    return false; 
}); 
$(".input-field").blur(function() { 
    $(this).removeClass("input-field-focus"); 
    $(this).prev(".label-info").hide(); 
    return false; 
}); 

réponse originale:

Votre code fonctionne très bien: http://jsfiddle.net/D9qnk/

Je suppose que votre cachent d'abord le .label-info à l'aide visibility: hidden; au lieu de display:none;

Si tel est le cas, passez votre css à utiliser display:none à la place.

.label-info { 
    display: none; 
}​ 

Ou si vous voulez utiliser la propriété visibility, puis modifiez sa valeur à l'aide .css():

$(this).siblings(".label-info").css('visibility','visible'); 

... 

$(this).siblings(".label-info").css('visibility','hidden'); 
+0

A voté pour cet outil génial! – gnome

+0

Salut Patrick, merci de montrer jsfiddle, awsome en effet. Je viens de mettre à jour le code pour montrer le problème .. avec 2 champs, il montre les deux divs. – FFish

+0

http://jsfiddle.net/7wxZy/ – FFish

Questions connexes