2012-03-21 11 views
4

ユーザーがデータを入力して変更を有効にするために保存をクリックする必要があるページがありますが、ユーザーがブラウザウィンドウを閉じるか別のリンクをクリックして別のページに移動しようとすると問題が発生します。 ..ユーザーは、これまでに保存されているすべてのエントリを削除する必要があり、彼ははい、問題は彼が「いいえ」をクリックしたときに来て上のクリックした場合、私はそれを次のようにやっているページのアンロードを停止するにはどうすればよいですか?

window.onbeforeunload = function() 
{ 
if(confirm('Are you sure you want to navigate')) 
    { 
    //Invoke `enter code here`server side method 
    } 
else 
{ 
    // return false; 
} 
} 

すべてが正常に動作します。..彼がNoをクリックしても、ページのアンロードメソッドが呼び出されて別のページにリダイレクトされますが、同じ状態で同じページにとどまりたいのですが...これを達成するのを手伝ってください。

おかげで、あなたの応答に感謝....

+2

[JSでのページのアンロード(ナビゲート)を停止するにはどうすればよいですか?](http://stackoverflow.com/questions/1299452/how-do-i-stop-a-page-from- unloading-naviating-away-in-js) –

+3

AFAIRでは、 'confirm'は呼び出されませんが、文字列が返されます。 – kirilloid

答えて

0

onbeforeunloadは戻り値として文字列を受け取ります。その文字列はブラウザに表示され、ページに留まるか放置するかの選択肢があります。しかし、それはあなたができることです。

7

ユーザーがページを離れないようにすることはできません。あなたがすることができることは、彼らが離れるかどうかを尋ねるメッセージを警告することです。

window.onbeforeunloadイベントは、文字列(および文字列のみ)を返す必要があります。この文字列は、ブラウザで作成された警告ボックスに表示されます。

自分のアラートボックスを使用することも、ユーザーを離れる(またはリダイレクトする)こともできません。

window.onbeforeunload = function(){ 
    return 'Are you sure you want to leave?'; 
}; 

またはjQueryの

$(window).on('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

ユーザーがページを離れたとき、あなたは(あなたがここasync: falseを使用する必要があります)AJAX呼び出しを行うためにonunloadイベントを使用することができます。

例:

$(window).unload(function(){ 
    $.ajax({ 
     url: '/path/to/page/', 
     async: false, // this may be needed to make sure the browser doesn't 
         // unload before this is done 
     success: function(){ 
      // Do something 
     } 
    }); 
}); 

注:ユーザーが完了したときに代わりにこれを行うのは、なぜあなただ​​けのすべてを保存しませんか?保存する代わりに、ユーザーが終了しない場合は削除しますか?

+0

お返事いただきましてありがとうございました.AJAXの電話をもう一度やり直すにはどうすればいいですか。 – user788312

+0

@ user788312:どうぞよろしくお願いします。私は答えを少し広げました。 –

+0

+1私はこの解決策が好きですが、私は彼のアプリケーションが無効な状態にあると思います。誰もAJAX呼び出しがデータを削除することを保証することはできません...ユーザーがインターネット接続を失っている、またはブラウザがタスクマネージャーによって殺されている可能性もあります...等 – Neysor

2

まずは:できません!それは不可能だ。 onbeforeunloadは、戻り値として文字列を受け入れ、ユーザーがそれを望む場合は閉じます。その後、

しかし、コンピュータはエネルギーがないものとシャットダウンしている場合は何が起こるかを考えますか?または、ブラウザがタスクマネージャによって閉じられますか?またはさらに多くの "現実的":インターネット接続が失われる! =>あなたは無効なデータ状態も持っています!

虚偽の問題を解決しようとしています!あなたの問題はこの関数ではない、あなたの問題はあなたの公式の状態です!

なぜあなたは、機能のいくつかの種類が必要なのですか?保存をクリックする前にデータを保存していますか?それからしないで!または、データベース内の未完成のデータを検出し、タイムアウトの後にそれを削除する別のクエリを必ず作成してください。

0

は、あなたはそれ以外の場合は、初回のみ動作しますが、ちょうどwindow.historyがクリーンである場合は、このボタンを戻る無効にしてページ

function noBack() { 
    window.onbeforeunload = function(){window.history.forward()} 
} 

に次の関数を呼び出して、このようなものを使用することができます。

関連する問題