2009-05-01 24 views
0

私はいくつかの入力フィールドが変更されたかどうかを確認する機能を持って:ASP.NETポストバックとwindow.onload

var somethingchanged = false; 
$(".container-box fieldset input").change(function() { 
    somethingchanged = true; 
}); 

そしてwindow.onloadや火災これで待機機能:

window.onbeforeunload = function(e) { 
    if (somethingchanged) { 
     var message = "Fields have been edited without saving - continue?"; 
     if (typeof e == "undefined") { 
      e = window.event; 
     } 
     if (e) { 
      e.returnValue = message; 
     } 
     return message; 
    } 
} 

しかし、フィールドの一部を編集して保存ボタンを押すと、ポストバックがありフィールドが編集されているため、イベントがトリガーされます。とにかくこれが周りにあるので、保存ボタンをクリックしてもイベントは発生しません。

ありがとうございました

答えて

1

このパターンを実行すると、ページにshowDirtyPromptがあります。次に、汚れたチェックをしたくないアクションが発生したときに、変数をfalseに設定するだけです。これは、ボタンのクライアントサイドクリックイベントで実行できます。

この素晴らしい点は、プロンプトを表示したくない場合や、他のポストバックを実行する他のボタンがある可能性があるということです。このようにして、あなたのダーティチェック機能はいくつかのボタンをチェックする必要はなく、責任感を取り戻すことができます。

<input type="button" onclick="javascript:showDirtyPrompt=false;".../> 

function unloadHandler() 
{ 
    if (showDirtyPrompt) 
    { 
    //have your regular logic run here 
    } 
    showDirtyPrompt=true; 
} 
+0

OnClientClick =「偽= somethingchangedは、」あなたはdoesnのポストバックをhagve場合は、あなたのコンテンツを保存するので、作品のトリック – janhartmann

+1

をした; tはあなたがダーティフラグの状態をpresrveする必要があるコンテンツを保存します... – JoshBerke

+0

情報をありがとう! :-) – janhartmann

0

はい。クリックされたボタンが保存ボタンでないことを確認してください。したがって、それは何かのようになる可能性があります

if ($this.id.not("savebuttonID")) { 
    trigger stuff 
} 
関連する問題