0

次のコード例を参照してください。

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 にリセットされます。そのため、システムはフォームが変更されたかどうかを知りません。

では、「アップロード」をクリックした後にフォームが変更されたことを確認し、「アップロード」をクリックしたときに確認ボックスを戻さないようにするにはどうすればよいですか。

4

1 に答える 1

0

自分に答えてください。

クッキーを使用しています。それがvar form_changeJavaScript の Cookie になります。

次に、サーバー コードでは、IsPostBack ではなく、これを追加して 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」を設定する必要があることを確認する必要があります。または、ページが残っている場合は、更新パネルに配置することをお勧めします。

于 2012-05-02T13:05:37.133 に答える