Javascript 防止从与jquery绑定的函数回发
我试图运行一些javascript代码,当焦点在特定的文本框上时按下“Enter”键。如果出现这种情况,我不希望该页面回发。(但是,如果有人单击“提交”按钮,则我希望该页面像往常一样进行回发。) 我有一个包含以下内容的页面: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) {
<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();});