Javascript 防止从与jquery绑定的函数回发

Javascript 防止从与jquery绑定的函数回发,javascript,jquery,asp.net,postback,asp.net-4.0,Javascript,Jquery,Asp.net,Postback,Asp.net 4.0,我试图运行一些javascript代码,当焦点在特定的文本框上时按下“Enter”键。如果出现这种情况,我不希望该页面回发。(但是,如果有人单击“提交”按钮,则我希望该页面像往常一样进行回发。) 我有一个包含以下内容的页面: <script type="text/javascript"> $(function () { $('#txtInput').on('keyup', function (e) { if (e.keyCode == 13) {

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

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

<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" />
我的问题是:

1。为什么这不起作用?


2。如何实现此行为?

刚刚测试了此功能,它仅适用于按键事件,当释放按键时为时已晚:

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

您是否尝试过使用
e.PreventDefault()
?在这种情况下,您可能还需要使用
keydown
keypress
捕捉默认事件

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

$(函数(){
$('#txtInput')。on('keydown',函数(e){
如果(e.which==13){
e、 预防默认值();
警报(“已单击输入”);
}
});
});
不过,您应该知道,通过破坏键盘功能,您无法满足可访问性标准,这可能会给某些用户带来困难。确保为仅使用键盘的用户提供导航方式

编辑:由于问题的性质(ASP.NET),您可能需要以不同的方式处理此问题

您可以a)看看这个问题:或者b)应用上面的Javascript解决方案,但将其应用于整个文档而不是元素


我不建议使用第二个,因为它可能会破坏可访问性用户的功能。

您需要使用keypress事件,因为它发生在密钥释放之前,因此可以取消

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();});
引用评论:

这可能是因为keyup事件。从理论上讲,关键在于 这件事已经发生了。你试过按键吗 相反


这可能是因为keyup事件。理论上,钥匙已经打开了,所以事件已经发生了。你试过用按键吗?@CarlosMartinezT,
keypress
事件,再加上
return false
,是我唯一可以开始工作的事情。非常感谢。你应该将此作为答案发布。不幸的是,这对我也不起作用。回发仍在发生。@JeremyWiggins-那么你又做错了什么,因为它应该可以正常工作!我同意,但我不明白我怎么会做错事;我把我的申请表全部贴了出来。我看到它可以在你的小提琴上工作,但在asp.net应用程序中,它仍然会发回。使用
keypress
而不是
keydown
似乎可以做到这一点。在许多字符上,
keypress
keydown
的返回值实际上是不同的,但据我所知,它们都应该返回
13
作为回车符。一定是ASP?杰里米-哇,这是一个ASP应用程序,不是吗。因为某种原因第一次完全错过了。是的,您需要使用“returnfalse”,但您可能需要将其与e.PreventDefault结合使用。现在做一点研究。不幸的是,这对我也不起作用。回发事件仍在发生。
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();});