我有一个带有默认按钮设置的表单。所以当我按回车键时,无论焦点如何都会提交表单。我的要求是当焦点位于fileupload控件内并按下enter时,而不是提交表单show browse对话框。所以我创建了一个面板并将onKeyPress事件附加到此面板
fileUploadDocument.Attributes.Add("onkeyPress", "return ByPassEnter(event);");
<asp:Panel ID="fileUploadDocument" runat="server">
<div>
<uc2:FileUploadControl ID="ucdocxUploadControl" runat="server" ErrorMessageNoFileSelected="Please select a file for upload."
ValidationGroup="BrandLogoFileUpload" />
</div>
</asp:Panel>
function ByPassEnter(e) {
var evt = (e) ? e : window.event;
var key = (evt.keyCode) ? evt.keyCode : evt.which;
if (key == 13) {
document.getElementById('<%=ucdocxUploadControl.BaseFileUploadControl.ClientID %>').click();
CancelDefault(evt);
}
}
function CancelDefault(e) {
e.cancel = true;
if (e.preventDefault) {
e.preventDefault();
}
e.returnValue = false;
}
当我在文件上传控件上按Enter键时,会显示浏览对话框,当我选择文件或在浏览对话框中点击取消时,会发生回发。 e.returnValue = false应该会阻止回发,但即使这样也会发生回发。
然而,如果我将onkeypress更改为onkeydown,一切正常并且回发不会发生。有人告诉我这些事件的不同以及为什么回发发生在onkeypress上。
答案 0 :(得分:2)
按下并释放按键后,按键事件将触发。此时,表单的提交操作已激活。
按下之后但在发布之前,keydown会发生火灾。此时,您可以通过注册取消按键。