5

私はフォームが動的に生成されるエンタープライズ アプリケーションに取り組んでおり、コードを制御することはできません。フォーム内のほとんどのコントロールには、次のコードが関連付けられています

<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 キャンセル ダイアログをユーザーに提示するために、次のコードに慣れていました。

//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 ダイアログが表示されるようにしたいと考えています。

助けてください

4

1 に答える 1

6

.onbeforeunload()グローバルです。ページを離れるいくつかの方法だけでトリガーすることはできません。イベント ハンドラーがインストールされている場合、視聴者がどのようにページを離れてもトリガーされます。

独自の内部状態を追跡し、onbeforeunload()ハンドラーで何かをプロンプトするか、単に何も返さないかを決定できます (したがって、プロンプトは作成されません)。

したがって、次のようなコードを作成できます。

//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() {

バインドされているイベントに「on」がなくなったことに注意してください。以前onbeforeunloadのバージョンの jQuery を新しいバージョンで使用しても、何も起こりません。

于 2012-03-27T03:06:19.657 に答える