1

我试图弄清楚 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,我将获得捕获退格键的能力,但是当我按下 enter 时,提交按钮仍然处于活动状态。

如果我将 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;
    }
}
4

3 回答 3

3
  • 按下键盘上的任意键时会触发 onKeyPress
  • 当您释放键盘上的键时会触发 onKeyUp。如果您按下任何键并且不释放它,onKeyPress 将被触发,但不会触发 onKeyUp

可能您更愿意在表单中执行onSubmit验证。

于 2012-05-22T18:44:56.050 回答
3

有趣的事实:该keypress事件不是任何标准的一部分,因此浏览器供应商可以自由地使其行为随心所欲。但是,按照惯例,keypress只会触发具有可打印表示的键。如果要捕获不可打印的按键(箭头键、控制键、退格键等),则需要keyup(或keydown)。

你不能用onkeydown吗?或者使用onkeyup并检查 Enter 键(e.keyCode13)?

其他注意事项:

keypress并且keydown会在按住键时重复触发,而keyup只会触发一次。

MDN 有一个方便的综合键盘事件指南,其中包含更多信息。

于 2012-05-22T18:47:40.650 回答
0

keypress仅适用于没有元键的字母、数字和符号
keyup适用于键盘上的所有键​​​​​​</p>

在这个小提琴中使用了 jQuery

于 2012-05-22T18:58:08.917 回答