2012-03-27 9 views
5

フォームを動的に生成し、コードを制御できないエンタープライズアプリケーションで作業しています。フォーム内のコントロールのほとんどは、彼らにonbeforeunload - 選択的イベントへのバインド

<select name="s_10_1_1_0" onchange = 'SWESubmitForm(document.SWEForm10_0,s_5,"","1-E0RHB7")' id='s_10_1_1_0' tabindex=1997 > 

<input type="text" name='s_10_1_11_0' value='' onchange = 'SWESubmitForm(document.SWEForm10_0,s_7,"","1-E0RHB7")' id='s_10_1_11_0' tabindex=1997 maxlength="30"> 

を関連するコードを以下している私たちは、ユーザは、ヘッダーやフッターにリンクを使用して、いくつかの他のページに移動しようとすると、ダイアログをキャンセルし、[OK]を提示したいと思います。

私はonbeforeunloadイベントをバインドし、ok cancelダイアログをユーザに提示するために次のコードを使用しました。

//this identifies the unique page name 
var viewName = $('input[name="SWEView"]').val(); 
// if I am on desired page bind the event so that now dialog is presented to user 
if(viewName == "XRX eCustomer Create Service Request View"){ 
    $(window).bind('beforeunload', function(){ 
    return 'Your Inquiry has not been submitted yet.'; 
}); 
} 

しかし、問題は、このダイアログが毎回ユーザが(私はそれがのonchangeイベントのSWESubmitFormコード存在によるものであると考えている)形式で任意のフィールドの値を変更するということです。

ユーザーがフォーム外の他のリンクをクリックすると、つまり、ページ上で選択的なイベント(ウィンドウを閉じるなど)をonbeforeunloadにすると、onbeforeunloadダイアログが表示されます。

答えて

6

.onbeforeunload()がグローバルヘルプしてください。あなたはページを出るいくつかの方法のためにそれを誘発することはできません。イベントハンドラがインストールされている場合、ビューアがページからどのように離れてもトリガされます。

自分自身の内部状態を把握し、onbeforeunload()ハンドラで何かをプロンプトするか、何も返さない(プロンプトを出さない)かどうかを決めることができます。このよう

が、それは、この答えは、もはや機能していることを指摘しない価値があるだろう、Googleは多くのビューを取得する上で非常に高いです

//this identifies the unique page name 
var viewName = $('input[name="SWEView"]').val(); 
// if I am on desired page bind the event so that now dialog is presented to user 
if(viewName == "XRX eCustomer Create Service Request View"){ 
    $(window).bind('beforeunload', function() { 
     // figure out whether you need to prompt or not 
     if (myStateSaysToPrompt) { 
      return 'Your Inquiry has not been submitted yet.'; 
     } else { 
      return; // no prompt 
     } 
    }); 
} 

更新:

だから、あなたはこのようなコードを持つことができます。

$(window).bind('beforeunload', function() { 

バインドされているイベントでは、もはや「オン」ではないことに注意してください。それ以降のバージョンのjQueryで前のonbeforeunloadを使用すると、何も起こりません。

関連する問題