在没有服务器交互的情况下捕获javascript中的按钮单击
我有一个注册表格,要求用户在两个单独的文本框中输入他们的电子邮件和密码。我想提供一个用户可以单击的按钮,以便用户单击该按钮时,该密码(被屏蔽)将显示在弹出窗口中。
当前,我的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;
}
无标题页面