onKeyPress和onKeyUp之间的区别

时间:2012-05-22 18:33:45

标签: javascript web

我想弄清楚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;
    }
}

3 个答案:

答案 0 :(得分:3)

    当按下键盘上的任何键时,
  • onKeyPress会被触发
  • 释放键盘上的键时会触发
  • onKeyUp。如果你按任何 键,不要释放它,onKeyPress将被解雇,但也不会onKeyUp

您可能希望在表单中执行验证onSubmit

答案 1 :(得分:2)

有趣的事实:keypress事件不是任何标准的一部分,因此浏览器供应商可以自由地使其表现得像他们喜欢的那样。但是,通常情况下,keypress仅触发具有可打印表示的键。如果您想捕获不可打印的按键(箭头键,控制键,退格键等),您需要keyup(或keydown)。

你不能使用onkeydown吗?或者使用onkeyup并检查回车键(e.keyCode 13)?

其他说明:

当按下键时,

keypresskeydown会反复触发,而keyup只触发一次。

MDN有一个方便的全面KeyboardEvent guide,其中包含更多信息。

答案 2 :(得分:0)

keypress仅适用于没有metakey的字母,数字和符号 keyup适用于键盘上的所有键

在此fiddle

中使用了jQuery