2011-05-09 51 views
7

我正在尝试将可见文本添加到说“输入密码”的密码字段中,并且在单击该文本时清除并键入点。我有两个输入类型=文本和另一个密码。密码输入在开始时隐藏,但在用“输入密码”指令单击输入后出现。如果密码字段为空,则为jquery

它这样做http://mudge.github.com/jquery_example/但我试图使它的密码字段。

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

什么不起作用:

当您填写的密码输入(用点显示),然后单击出来的输入是隐藏的, #password_instruction输入显示。所以它不尊重if语句。由于某种原因,即使我输入了密码,它仍将输入视为空。

我在这里做错了什么?

+0

你使用的是什么版本的jQuery? – 2011-05-09 19:50:28

+0

最新的一个。为什么? – CyberJunkie 2011-05-09 19:51:42

+0

嗯,我以为我在新的版本中读了一些关于'.val()'的内容,但它是关于'.attr()'的。别担心。 :) – 2011-05-09 19:53:15

回答

9

您似乎预计在拨打focus()之后会出现某种“暂停”,并且只有当最终用户输入完密码后才会执行JS代码的剩余部分。

这是不正确的。该功能一次完全执行。

您需要移动下面这段

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

另一独立功能:

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

谢谢你的解释!也许我会将代码与php关联得太多。 :) – CyberJunkie 2011-05-09 20:03:09

+0

不客气。 – BalusC 2011-05-09 20:03:51

3

你的意思是:

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

如果你想为腿做到这一点acy浏览器,您必须将支票移至onBlur事件。在jQuery中,这看起来像:

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

谢谢!该代码是占位符的替代品,我发现这对于Explorer无效:( – CyberJunkie 2011-05-09 19:56:30

+0

啊,很有道理。很多人似乎并没有意识到占位符,所以想我最好让你知道! – 2011-05-09 19:57:47

+0

谢谢!我只是在前面的问题中发现它:)但像往常一样,浏览器使它几乎无足轻重..人们应该受到教育,以停止使用浏览器 – CyberJunkie 2011-05-09 20:00:50

相关问题