0

当焦点位于特定文本框上时按下“Enter”键时,我正在尝试运行一些 javascript 代码。如果发生这种情况,我不希望页面回发。(但是,如果有人单击提交按钮,那么我希望页面像往常一样回发。)

我有一个包含以下内容的页面:

<script type="text/javascript">
$(function () {
    $('#txtInput').on('keyup', function (e) {
        if (e.keyCode == 13) {
            alert('enter was clicked');
            return false;
        }
    });
});
</script>

<asp:TextBox ID="txtInput" runat="server" ClientIDMode="Static"></asp:TextBox>
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmitClick" Text="Submit" />

我一直认为这return false;是实现此目的的方法,但在这种情况下,它不起作用。

我还在我的javascript函数中尝试了以下内容,但无济于事。

$(function () {
    $('#txtInput').on('keyup', function (e) {
        if (e.keyCode == 13) {
            e.cancel = true;
            e.returnValue = false;
            alert('enter was clicked');
        }
    });
});

我的问题是:

1. 为什么这不起作用?

2.我怎样才能实现这种行为?

4

4 回答 4

1

You need to use the keypress event because it happens before the key is released and therefore it can be cancelled.

Quoting the comment:

It might be because of the keyup event. In theory the key is already up, so the event already happened. Have you tried with keypress instead?

于 2013-02-16T16:00:34.140 回答
0

刚刚对此进行了测试,它仅适用于 keydown 事件,当释放键时为时已晚:

$(function () {
    $('#txtInput').on('keydown', function(e) {
        if (e.which == 13) e.preventDefault();
    });
});

小提琴

于 2013-02-14T17:41:44.180 回答
0

你试过使用e.PreventDefault()吗?对于这种情况,您可能还需要使用keydownkeypress捕获默认事件。

<script type="text/javascript">
$(function () {
    $('#txtInput').on('keydown', function (e) {
        if (e.which == 13) {
            e.PreventDefault();
            alert('enter was clicked');
        }
    });
});
</script>

但是,您应该知道,通过破坏键盘功能,您并没有满足可访问性标准,这可能会使某些用户感到困难。确保为仅使用键盘的用户提供导航方式。

编辑:由于您的问题(ASP.NET)的性质,您可能必须以不同的方式解决这个问题。

您可以 a) 看看这个问题:取消 ASP.NET 中的默认提交按钮或 b) 应用上面的 Javascript 解决方案,但将其应用到整个文档而不是元素。

我不建议使用第二个,因为它可能会破坏无障碍用户的功能。

于 2013-02-14T17:49:25.990 回答
0
function PreventEnterKeyInTextBox(){
$('#txtInput').keypress(function(evt){evt=(evt)?evt:window.event; 
if(evt.keyCode==13){
    if($.browser.msie)
         {evt.cancelBubble=true; evt.returnValue=false;}
    else{evt.preventDefault();}
 }});
}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PreventEnterKeyInTextBox);
//Or $(document).ready(function(){PreventEnterKeyInTextBox();});
于 2013-02-14T20:07:03.287 回答