1

我有一个注册表单,要求用户输入他们的电子邮件和密码,两者都在两个单独的文本框中。我想提供一个用户可以单击的按钮,以便在用户单击该按钮时密码(被屏蔽)将出现在弹出窗口中。

目前我的 JavaScript 代码如下:

    function toggleShowPassword() {       
        var button = $get('PASSWORD_TEXTBOX_ID');
        var password;
        if (button)
        {
            password = button.value;
            alert(password);
            button.value = password;  
        } 
   }

问题是每次用户单击按钮时,Firefox 和 IE 都会清除密码。我希望他们能够以明文形式查看密码以进行验证,而无需重新输入密码。

我的问题是:

  1. 为什么每次单击按钮都会重置密码字段?

  2. 一旦用户以明文形式看到他/她的密码,如何才能使密码字段不被清除?

4

8 回答 8

1

我会假设浏览器在尝试设置密码字段值的脚本方面存在一些问题:

button.value = password;

这行代码没有真正的目的。password.value在读取值并在alert().

这应该是您的代码的更简单版本:

function toggleShowPassword() {       
    var button = $get('PASSWORD_TEXTBOX_ID');
    if (button)
    {
        alert(button.value);
    } 

}

编辑:实际上我只是做了一个快速测试,Firefox 使用诸如button.value = "blah". 因此,情况似乎并非如此……我会检查您的 ASP.NET 代码是否像其他人建议的那样导致回发。

于 2008-09-04T18:38:54.023 回答
1

听起来您在每次点击时都在向服务器发出请求,在每次页面加载时重置密码框是浏览器的典型行为。

于 2008-09-04T18:45:29.530 回答
1

你没有说你在使用 ASP.NET,但是......

按照设计,ASP.NET 在回发期间清除 Mode 为 Password 的 TextBox 控件的值。我使用以下代码在子类中解决此问题:

// 如果 TextMode 是“密码”,Text 属性将不起作用
如果(TextMode == System.Web.UI.WebControls.TextBoxMode.Password)
    属性[“值”] = stringValue;
于 2008-09-04T18:45:56.890 回答
1

如果您不希望按钮提交表单,请确保它的类型为“按钮”而不是“提交”。例如,您可能会执行以下操作:

<input type="button" value="Show My Password" onclick="toggleShowPassword()"/>
于 2008-09-04T18:49:35.807 回答
1

在您的 HTML 中:

<input type="button" onclick="toggleShowPassword();">

您需要使用“按钮”而不是“提交”来阻止您的表单发布。

于 2008-09-04T18:52:33.710 回答
1

我做了一个工作版本的快速示例:

<html>
    <head>
        <script type="text/javascript" src="prototype.js"></script>
        <script type="text/javascript">
            function toggleShowPassword() {       
                var textBox = $('PasswordText');
                if (textBox)
                {
                    alert(textBox.value);  
                } 
            }
        </script>
    </head>
    <body>
        <input type="password" id="PasswordText" /><input type="button" onclick="toggleShowPassword();" value="Show Password" />
    </body>
</html>

关键是输入是按钮类型而不是提交。我使用原型库按 ID 检索元素。

于 2008-09-04T18:53:55.670 回答
0

您不需要这样做,button.value = password;因为读取值不会改变它。我不确定为什么要清除它,也许 JavaScript 不允许修改密码字段值。

于 2008-09-04T18:41:42.673 回答
0

哈哈!

答案如果在这里: http ://forums.asp.net/p/1067527/1548528.aspx

我想出了解决方案...解决方法很简单

  OnClientClick="myOnClick()"

  OnClientClick="return myOnClick()"

这是完全更正的代码...

function myOnClick() { //执行一些其他操作... return false; } 无标题页面

于 2008-09-04T19:22:51.857 回答