简体   繁体   English

如何在密码字段中显示文本

[英]How display text in password field

I have the password field on page. 我在页面上有密码字段。 I want to display text "Enter password" on screen before entering password but on focus when user enter password it should go back to password type 我想在输入密码之前在屏幕上显示文本“输入密码”,但是当用户输入密码时,焦点应该回到密码类型

EDIT: I am using Jquery as well so any small jquery solution will do 编辑:我也在使用Jquery,所以任何小的jquery解决方案都可以

[Latest revisision to include IE support] [包括IE支持的最新修订]
Update for IE9: Version 9 of IE allows the change of the type attribute for input elements of type text/password back and forth IE9的更新:IE的第9版允许来回更改text / password类型的输入元素的type属性

As mentioned in the comments (and verified) the previous examples did not work in IE as it does not allow the change of the type by script ... Here is a workaround, which replaces the element with another back-and-forth ( code assumes you start with a text box ) 正如评论中所提到的(并经过验证),前面的例子在IE中不起作用,因为它不允许通过脚本更改类型......这是一个解决方法,用另一个来回替换元素( 代码假设您从文本框开始

var element = document.getElementById('mysearch');

var text_to_show = 'Enter Password';

element.value = text_to_show; // set the message for the first time

element.onfocus = function(){ 
                       if (this.value == text_to_show) 
                           {
                             var newElement = convertType(this);
                            newElement.value = '';
                            setTimeout(function(){document.getElementById(newElement.id).focus()},100);
                           }
                       }
element.onblur = function(){ 
                       if (this.value == '') 
                          {
                            var newElement = convertType(this);
                            newElement.value = text_to_show;
                          }
                    }


function convertType(elem)
{
    var input = document.createElement('input');
    input.id = elem.id;
    input.value = elem.value;
    input.onfocus = elem.onfocus;
    input.onblur = elem.onblur;
    input.className = elem.className;
    if (elem.type == 'text' )
      { input.type = 'password'; }
    else
      { input.type = 'text'; }

    elem.parentNode.replaceChild(input, elem);         
  return input;
}

[update] [更新]

scrap the original answer, i missed the part that you want to keep the field as password ( with hidden contents ) 废弃原始答案,我错过了你想保留该字段作为密码的部分( 隐藏内容

Revised answer : 修改回答

var element = document.getElementById('mysearch');

var text_to_show = 'Enter Password';
element.type="text"; // set the type to text for the first time
element.value = text_to_show; // set the message for the first time
element.onfocus = function(){ 
                       if (this.value == text_to_show) 
                           {
                            this.type="password";
                            this.value = '';
                           }
                       }
element.onblur = function(){ 
                       if (this.value == '') 
                          {
                            this.type="text";
                            this.value = text_to_show;
                          }
                       }

[original answer] [原始答案]

 
 
 
  
  var element = document.getElementById('inputID'); // inputID should be the ID given to the password element var text_to_show = 'Enter Password' element.value = text_to_show; element.onfocus = function(){ if (this.value == text_to_show) this.value = '';} element.onblur = function(){ if (this.value == '') this.value = text_to_show;}
 
  

您可以使用此jQuery插件 ,它支持密码字段。

You can either give it an image background with the text Enter Password that you change dynamically using javascript (ideally by just removing a CSS class), 您可以使用javascript动态更改的文本Enter Password为其提供图像背景(理想情况下只需删除CSS类),

<input type="password" class="enter-password"> or
<input type="password" style="background-image:url('enter-password.png');">

or place a fake input that you replace with javascript for a password input . 或者将用javascript替换的虚假input放入密码input

I'm not sure how well it would cross browser to change the type of input on the fly. 我不确定如何通过浏览器来动态更改input类型。

document.getElementsByTagName("input")[0].type = "text" /* change a hidden field to text*/ works on Firefox, but I wouldn't rely on it working well on IE without testing. document.getElementsByTagName("input")[0].type = "text" /* change a hidden field to text*/适用于Firefox,但我不会依赖它在IE上运行良好而不进行测试。

If you don't want to use a plugin (like the one in SLaks' answer ), you have to either position a label above the password field (what the plugin does), or hide the password field and show a text input in its place until it gets the focus. 如果您不想使用插件(如SLaks的答案中的插件),您必须在密码字段上方放置标签(插件的作用),或隐藏密码字段并在其中显示文本输入直到它得到焦点。

Internet Explorer doesn't let you change an input's type from "password" to "text", so any solution that tries to do that won't work in IE. Internet Explorer不允许您将输入的类型从“密码”更改为“文本”,因此任何尝试执行此操作的解决方案都无法在IE中使用。

Here's an example that works in at least IE7 (it should work in IE6, but I haven't tried it), Chrome, and Firefox. 这是一个至少适用于IE7的例子(它应该适用于IE6,但我还没有尝试过),Chrome和Firefox。

jQuery(function($) {
    function make_label_field(password_input, label) {
        var new_input = document.createElement("input");
        new_input.type = "text";
        new_input.size = password_input.size;
        new_input.className = password_input.className;
        new_input.setAttribute("style", password_input.getAttribute("style"));
        // Copy any additional properties you need. You may want to add a class
        // to style the label differently

        new_input.value = label;

        $(new_input).focus(function() {
            $(this).hide();
            $(password_input).show().focus();
        });
        return new_input;
    }

    $("input[type=password]").each(function() {
        $(this).after(make_label_field(this, "Enter password")).hide();
    }).blur(function() {
        if (this.value == "") {
            $(this).hide().next().show();
        }
    });
});

[ revised answer ] Added compatibility for ie6 from this website [修改后的答案]本网站添加了ie6的兼容性

<form id="form1" name="form1" method="post" action="">
  <input onfocus="clear_field(this,'Enter Username')" onBlur="revert_field(this,'Enter Username')" name="username" type="text" id="username" value="Enter Username" />
  <p>
<input type="text" id="passwordtext" value="Password" onclick="switchto(1)" onkeydown="switchto(1)">
<input type="password" id="password" value="" onblur="if (this.value=='')switchto(0)" style="display:none">
  <p>
    <input  type="submit" name="button" id="button" value="Submit" />
  </p>
</form>

<script>
function switchto(q){
    if (q){
        document.getElementById('passwordtext').style.display="none";
        document.getElementById('password').style.display="inline";
        document.getElementById('password').focus();
    } else {
        document.getElementById('password').style.display="none";
        document.getElementById('passwordtext').style.display="inline";
    }
}
function clear_field(field,text){
if(field.value==text){
    field.value = "";
    }
}
function revert_field(field,text){
if(field.value==""){
    field.value = text;
    }
}
</script>

[previous post ] maybe this help. [上一篇]也许这个帮助。

\n

\n

 
 
 
  
  <script> function clear_field(field){ field.value=''; } function change(){ document.getElementById('pass').value=''; document.getElementById('pass').type='password'; } </script>
 
  

There are several ways to do it but here is one way. 有几种方法可以做到,但这是一种方法。 I'm not saying that this is efficient but this will explain better of what is happening. 我并不是说这是有效的,但这将更好地解释正在发生的事情。

Copy and paste this to try it out! 复制并粘贴此内容即可试用!

<body>
<script type="text/javascript">

    text=document.createElement("input");
    text.type="text";
    text.value="password";
    text.setAttribute("onclick", 'toPassword();');
    text.setAttribute("onblur", 'toText();');
    document.getElementsByTagName("body")[0].appendChild(text);

    function toText()
    {
        if(document.getElementsByTagName("input")[0].value=="password" || document.getElementsByTagName("input")[0].value=="")
        {
            document.getElementsByTagName("input")[0].type="text"; 
            document.getElementsByTagName("input")[0].value="password"
        }
    }

    function toPassword()
    {
        if(document.getElementsByTagName("input")[0].value=="password" || document.getElementsByTagName("input")[0].value=="")
        {
            document.getElementsByTagName("input")[0].type="password";
            document.getElementsByTagName("input")[0].value=""
        }
    }
</script>
</body>

It creates a text field with value of password and then when you click in it, it then changes to password field and removes its value. 它创建一个值为password的文本字段,然后当您单击它时,它会更改为密码字段并删除其值。 If you click and you did not enter anything then it will return to a text and change its value to password . 如果您单击并且未输入任何内容,则它将返回text并将其值更改为password

You may also enter a text field along with less javascript code too, all you would need is the functions. 你也可以输入一个文本字段以及更少的javascript代码,你需要的只是函数。

If you want this to work in IE you would need to create two inputs, one for text and one for password and alternate display=none and display=block on each of them. 如果你想在IE中使用它,你需要创建两个输入,一个用于文本,一个用于密码,交替display=nonedisplay=block

element.style.display="none";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM