2011-05-09 10 views
7

Próbuję dodać widoczny tekst do pola hasła z napisem "Wprowadź hasło", a po kliknięciu tekst zostanie wyczyszczony i wpiszesz kropki. Mam dwa wejścia jednego z typów = tekst i inne hasło. Wprowadzanie hasła jest ukryte od początku, ale pojawia się po kliknięciu wejścia za pomocą instrukcji "Wprowadź hasło".Jquery, jeśli pole hasła jest puste

Czyni to http://mudge.github.com/jquery_example/, ale próbuję zrobić to dla pól hasła.

HTML

<input type="text" id="password_instructions" /> 
<input type="password" id="password" /> 

jQuery

 var $password = $('#password'); 
     $password.hide(); //hide input with type=password 

     $("#password_instructions").click(function() { 
       $(this).hide(); 
       $('#password').show(); 
       $('#password').focus(); 

       if ($password.val().length === 0) { //if password field is empty    
        $password.focusout(function() { //when clicking outside empty password input 
         $(this).hide(); 
         $('#password_default_value').show(); 
         $('#password_instructions').default_value('Enter a password'); //will clear on click 
        });      
       } 
     }); 

Co nie działa:

Po wypełnieniu wejście hasło (z kropki pojawiające się) i kliknij na wejście jest ukryte i wyświetlane jest wejście #password_instruction. Więc nie jest to zgodne z pustym stwierdzeniem. Z jakiegoś powodu traktuje dane wejściowe jako puste, nawet jeśli wpisałem hasło.

Co ja tu robię źle?

+0

Jaką wersję jQuery używasz? –

+0

Najnowszy. Czemu? – CyberJunkie

+0

Ach, myślałem, że przeczytałem coś o '.val()' w nowym, ale dotyczyło to '.attr()'. Bez obaw. :) –

Odpowiedz

9

Wygląda na to, że spodziewasz się pewnego rodzaju "pauzy" po wywołaniu focus(), a resztka kodu JS zostanie wykonana dopiero po zakończeniu pracy przez użytkownika końcowego.

To nie jest prawda. Funkcja została wykonana całkowicie za jednym razem.

Trzeba ruchu następujący fragment

 if ($password.val().length === 0) { //if password field is empty    
      $password.focusout(function() { //when clicking outside password input 
       $(this).hide(); 
       $('#password_default_value').show(); 
       $('#password_instructions').default_value('Enter a password'); //will clear on click 
      });      
     } 

do inny samodzielną funkcję:

$('#password').focusout(function() { 
    if ($(this).val().length === 0) { //if password field is empty    
     $(this).hide(); 
     $('#password_default_value').show(); 
     $('#password_instructions').default_value('Enter a password'); //will clear on click 
    } 
}); 
+0

Dziękuję za wyjaśnienie! Może zbytnio powiązałem ten kod z php ... Twoja wersja działa! :) – CyberJunkie

+0

Nie ma za co. – BalusC

3

masz na myśli:

<input type="password" placeholder="enter password"> 

Jeśli chce zaimplementuj to dla nogi acy browsers, będziesz musiał przenieść czek do zdarzenia onBlur. W jQuery wygląda to następująco:

$('#password').blur(function() { 
    if ($password.val().length === 0) { //if password field is empty    
     $password.focusout(function() { //when clicking outside password input 
      $(this).hide(); 
      $('#password_default_value').show(); 
      $('#password_instructions').default_value('Enter a password'); //will clear on click 
     });      
    } 
}); 
+1

Dzięki! Kod jest zamiennikiem dla elementu zastępczego, który okazał się niedziałający na Explorerze :( – CyberJunkie

+0

Ach, ma to sens.Wiele osób nie wydaje się być świadomych znaków zastępczych, więc pomyślałem, że lepiej Cię powiadomię! –

+0

Dziękuję! Właśnie się o tym dowiedziałem w poprzednim pytaniu :) ale jak zwykle explorer sprawia, że ​​jest prawie nieistotny .. ludzie powinni być wykształceni, aby przestać używać explorera – CyberJunkie

Powiązane problemy