我想弄清楚onKeyPress和onKeyUp之间的区别。我知道onKeyPress发生在动作提交之前,onKeyUp发生之后。
我的问题是按下输入按钮后会发生什么?
如果我使用onKeyPress,我的代码工作正常,并且提交按钮被禁用。如果我使用onKeyUp它将提交它,但由于某种原因,提交按钮仍然是活动的。
以下是代码:
<script type="text/javascript">
function InformUser()
{
window.document.getElementById("loadingMessageDIV").style.display = "block";
<%=Page.GetPostBackEventReference(btnSubmit as Control)%>
document.getElementById("btnSubmit").disabled = true;
}
function validateTxt() {
var input = document.getElementById("<%=txtUserName.ClientID %>").value;
if(input.length > 0)
{
document.getElementById("btnSubmit").disabled = false;
}
else
{
document.getElementById("btnSubmit").disabled = true;
}
}
</script>
这是调用validateTxt()
的文本框<asp:TextBox ID="txtUserName" runat="server" Font-Size="11pt"
onkeyup="validateTxt()"></asp:TextBox>
这是提交按钮
<asp:Button ID="btnSubmit" runat="server" OnClientClick="InformUser();" OnClick="btnSubmit_Click"
Text="Login" Font-Bold="True"/>
<script type="text/javascript">
document.getElementById("btnSubmit").disabled = true;
</script>
所以回顾一下:如果我将onkeypress更改为onkeyup,我将获得捕获退格键的功能,但是当我按回车键时,提交按钮仍处于活动状态。
如果我将onkeyup更改为onkeypress,那么我可以按Enter键并取消激活提交按钮。缺点是我无法捕获退格。
谢谢!
感谢apsillers想出来。
我不得不使用onkeyup并检查输入密钥
function validateTxt(event) {
var input = document.getElementById("<%=txtUserName.ClientID %>").value;
var key = event.keyCode || event.which;
if(input.length > 0 && key != 13)
{
document.getElementById("btnSubmit").disabled = false;
}
else
{
document.getElementById("btnSubmit").disabled = true;
}
}
答案 0 :(得分:3)
您可能希望在表单中执行验证onSubmit。
答案 1 :(得分:2)
有趣的事实:keypress
事件不是任何标准的一部分,因此浏览器供应商可以自由地使其表现得像他们喜欢的那样。但是,通常情况下,keypress
仅触发具有可打印表示的键。如果您想捕获不可打印的按键(箭头键,控制键,退格键等),您需要keyup
(或keydown
)。
你不能使用onkeydown
吗?或者使用onkeyup
并检查回车键(e.keyCode
13)?
其他说明:
当按下键时, keypress
和keydown
会反复触发,而keyup
只触发一次。
MDN有一个方便的全面KeyboardEvent guide,其中包含更多信息。
答案 2 :(得分:0)
keypress
仅适用于没有metakey的字母,数字和符号
keyup
适用于键盘上的所有键
在此fiddle
中使用了jQuery