保留未保存的表单:按钮提交事件将重置“Changed_Form”状态

Leave Unsaved form: button submit event will reset the "Changed_Form" status

本文关键字:Changed 状态 Form 事件 保存 表单 提交 按钮 保留      更新时间:2023-09-26

请参阅下面的代码示例。

.HTML:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:FileUpload ID="FileUpload1" runat="server" />
<!--  upload button and Save button -->
<asp:Button ID="Upload" runat="server" Text="Upload" />
<asp:Button ID="Save" runat="server" Text="Save" />
<a href="otherpage.aspx">Cancel</a>

JavaScript: 默认情况下不会更改表单 var form_Change = 0;

window.onbeforeunload = function(e) {
if (form_Change==1){
    // if the form is changed, show a confirm box
    return 'Are you sure you want to navigate away from this page?';
}
}
$('input[type=text]').live('keyup',function(){
form_Change =1;
});

通常

用户在文本框中键入而未保存它。然后他试图重定向到其他页面或重新加载页面,鲍泽给他带来了一个确认框。

我首先在文本框中输入,然后单击"上传按钮",该按钮用于上传文件,但不保存(不影响更改)表单(并将未保存的文本保留在文本框中,就像回发后一样)。鲍泽给我带来了不需要的确认框。

我尝试修复它并添加类似的东西,

var button_inside_form =0;
$('Upload').live('click',function(){
    button_inside_form =1;
});
//and update form change logic in onbeforeunload 

但是,在页面回发后。它重新加载 JavaScript,form_Change重置为 0。因此,系统不知道表单是否已更改。

那么,单击"上传

"后如何检查表单是否已更改,并且在单击"上传"时不带回确认框。

回答我自己。

我使用cookie.即将var form_change转换为JavaScript中的cookie。

然后在服务器代码中,不是回传,我添加它来重置 cookie。

ClientScript.RegisterClientScriptBlock(Me.GetType, "IsPostBack", "var isPostBack = true;", True)

要检查

if (typeof isPostBack != 'undefined') {
    resetFormChange();}

使用此选项可防止"提交"按钮上的"确认"框

$('form').submit(function() {
    window.onbeforeunload = null;
});

多思考。如果提交的表单将保留在同一页面中,则 cookie 是必需的。form.submit将正常工作,但需要确保需要在"取消"按钮上设置"UseSubmitBehaviors"。或者如果导致页面停留,最好将它们放在更新面板中。