2011-05-09 17 views
7

Estoy tratando de agregar texto visible a un campo de contraseña que dice "Ingresar una contraseña" y al hacer clic el texto se borra y escribe puntos. Tengo dos entradas, una de tipo = texto y otra contraseña. La entrada de contraseña está oculta desde el principio, pero aparece después de hacer clic en la entrada con la instrucción "Ingresar una contraseña".Jquery si el campo de contraseña está vacío

Hace esto http://mudge.github.com/jquery_example/ pero estoy tratando de hacerlo para los campos de contraseña.

HTML

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

El 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 
        });      
       } 
     }); 

lo que no funciona:

Al rellenar la introducción de la contraseña (que aparece con puntos) y haga clic en la entrada está oculta y la entrada #password_instruction muestra. Entonces no está respetando la declaración if empty. Por alguna razón, trata la entrada como vacía incluso si ingresé una contraseña.

¿Qué estoy haciendo mal aquí?

+0

¿Qué versión de jQuery estás utilizando? –

+0

La última. ¿Por qué? – CyberJunkie

+0

Ah, pensé que había leído algo sobre '.val()' en el nuevo, pero se trataba de '.attr()'. Sin preocupaciones. :) –

Respuesta

9

Parece que esperas que haya algún tipo de "pausa" después de llamar al focus() y que el resto del código JS se ejecutará solo cuando el usuario final termine de escribir la contraseña de alguna manera.

Esto no es cierto. La función se ha ejecutado completamente de una vez.

Necesitas movimiento el siguiente fragmento

 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 
      });      
     } 

en otra función independiente:

$('#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

¡Gracias por la explicación! Tal vez haya relacionado el código demasiado con php ... ¡Tu revisión funciona! :) – CyberJunkie

+0

De nada. – BalusC

3

Qué quiere decir:

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

Si usted está deseando implementar esto para pierna navegadores acy, tendrá que mover el cheque al evento onBlur. En jQuery, esto se ve así:

$('#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

Gracias! El código es un reemplazo para marcador de posición que descubrí que no funciona en Explorer :( – CyberJunkie

+0

Ah, tiene sentido. Mucha gente no parece estar al tanto del marcador de posición, ¡así que pensé que sería mejor que lo hiciera saber! –

+0

Gracias! Me acabo de enterar en una pregunta anterior :) pero, como siempre, el explorador lo hace casi insignificante ... las personas deben ser educadas para dejar de usar el explorador – CyberJunkie

Cuestiones relacionadas