在没有服务器交互的情况下捕获javascript中的按钮单击

时间:2020-03-05 18:47:48  来源:igfitidea点击:

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

当前,我的JavaScript代码如下:

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

问题在于,每当用户单击该按钮时,Firefox和IE中的密码都会被清除。我希望他们能够以明文形式查看其密码以进行验证,而不必重新输入密码。

我的问题是:

  • 为什么每次单击按钮时密码字段都会不断重置?
  • 我如何才能做到,一旦用户以明文形式看到密码,就不会清除密码字段?

解决方案

回答

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

button.value = password;

这行代码没有实际目的。在前几行中读取" password.value"并在" alert()"中使用该值时," password.value"不受影响。

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

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

}

编辑:实际上我只是做了一个快速测试,而Firefox可以通过诸如button.value =" blah"这样的代码来设置密码字段的值。因此,看来情况并非如此……我将检查ASP.NET代码是否像其他人所建议的那样导致回发。

回答

我们不需要执行" button.value = password;",因为读取值不会更改它。我不确定为什么要清除它,也许JavaScript不允许修改密码字段值。

回答

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

回答

我们没有说我们正在使用ASP.NET,但是...

根据设计,ASP.NET在回发期间清除"模式"为"密码"的TextBox控件的值。我使用以下代码在子类中解决此问题:

// If the TextMode is "password", the Text property won't work
if ( TextMode == System.Web.UI.WebControls.TextBoxMode.Password )
    Attributes[ "value" ] = stringValue;

回答

如果我们不希望按钮提交表单,请确保其键入的是"按钮",而不是"提交"。例如,我们可以执行以下操作:

<input type="button" value="Show My Password" onclick="toggleShowPassword()"/>

回答

在HTML中:

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

我们需要使用"按钮"而不是"提交"来阻止表单发布。

回答

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

<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检索元素。

回答

哈哈!

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

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

OnClientClick="myOnClick()"

OnClientClick="return myOnClick()"

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

函数myOnClick(){
//执行其他操作...
返回false;
}
无标题页面