【问题标题】:Enter key causes the unnecessary post-backEnter 键导致不必要的回发
【发布时间】:2015-05-13 09:10:03
【问题描述】:

我在 vb.net 中有一个网络应用程序表单。 当我单击单选按钮时,将在服务器上运行回发。如果我同时按下回车,它会导致另一个回发到服务器。如何防止第二次回发?

<td class="tdClassic" id="tdCT">
<asp:RadioButton ID="rbSingle" runat="server" Text="Singl" AutoPostBack="true" GroupName="grpT" />
<asp:RadioButton ID="rbMultiple" runat="server" Text="Multiple" AutoPostBack="true" GroupName="grpTrainer" />
</td>

【问题讨论】:

  • 你怎么能在点击单选按钮的同时按回车,这是常见的做法吗?
  • 如果您为单选按钮设置了自动回发,那么所有这些行为都是如您所愿。要在您按 Enter 时停止回发表单,您需要使用 javascript
  • 不,这不是一种常见的做法,我偶然在我的 Web 应用程序中发现了那个东西。通常用户不应该做这种类型的练习,但据我所知,我想知道这一点。
  • @Tarang:你为什么要关心那些很可能永远不会发生的事情?你使用事件处理程序还是你的所有逻辑都在Page_Load 中?如果你使用RadioButtonCheckedChanged事件,应该不会在用户回车时触发。
  • @matt_lethargic .net 中没有任何属性吗?如果没有,那么如何使用 javascript 进行预防?

标签: asp.net vb.net autopostback


【解决方案1】:

如果您使用的是 jQuery,您可以使用以下命令阻止 endter 键提交表单:

$(document).keypress(function(e)
{
    if(e.keyCode === 13)
    {
        e.preventDefault();
        return false;
    }
});

如果没有,这可能会起作用:

<script language="JavaScript">
var nav = window.Event ? true : false;
if (nav) {
window.captureEvents(Event.KEYDOWN);
window.onkeydown = NetscapeEventHandler_KeyDown;
} else {
document.onkeydown = MicrosoftEventHandler_KeyDown;
}

function NetscapeEventHandler_KeyDown(e) {
if (e.which == 13 && e.target.type != 'textarea' && e.target.type != 'submit') { 
return false; 
}
return true;
}

function MicrosoftEventHandler_KeyDown() {
if (event.keyCode == 13 && event.srcElement.type != 'textarea' && 
event.srcElement.type!= 'submit')
return false;
return true;
}
</script>

或者如果您在页面上有一个按钮,那么UseSubmitBehavior 可能是一个更好的解决方案:

<asp:button id="Button1" text="Submit" onclick="SubmitBtn_Click"    usesubmitbehavior="false" runat="server"/>

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.usesubmitbehavior.aspx

【讨论】:

  • 哇,以上两个解决方案对我有用。但是我想告诉您有关 usesubmitbehavior="false" 的信息,因为我知道如果您分配属性,那么它只会阻止该按钮的单击事件,但不会阻止 me.load 事件。当您按 enter 时,而不是 me.load总是执行我是对还是错?请清除我的观点!
  • Me.Load 在页面加载或回发时执行。导致回发的原因可能会有所不同。
  • 所以 Me.Load 是发生任何回发时要调用的第一个事件。在执行任何控件的特定事件之后,对吗?
  • 是的,每次回发和页面首次加载时。 msdn.microsoft.com/en-us/library/ms178472%28v=vs.85%29.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多