0

更新: onbeforeunload を機能させようとしているページで何かが起こっています。レイアウトに設定すると、そのページ以外のすべてのページにポップアップ表示されます...したがって、壊れたJavaScript、またはonbeforeunloadを再定義するJavaScriptファイルが必要です。一度しか定義できないので

私はRailsプロジェクトに取り組んでおり、保存せずにページを離れるとデータが失われることをユーザーに警告するポップアップを設定しています. だから私はwindow.onbeforeunloadを使用しています

このスクリプト コードをビュー ファイルの先頭に追加して、1 つのページに設定します。

var saving = false;

window.onbeforeunload = function(){
    if(!saving)
      return 'Are you sure you don\'t want to save before you leave?';
};

ユーザーが保存ボタンを押すと、保存が true に設定され、別のページにリダイレクトされます。

同じ機能を必要とする別のビューファイルでまったく同じものを設定しようとすると、問題が発生します。

上記のコードをファイルにドロップした場合を除いて、ポップアップはまったく表示されません...いつでも。そこで、onbeforeunload 関数を設定するために利用可能な他のオプションを調べました。

だから私は現在それを次のように設定しています:

var saving = false;

window.onbeforeunload = displayConfirm();

function displayConfirm(){
    if(!saving){
      if(confirm('If you leave without saving, your changes will be lost. Press cancel to go back to save')){
        confirmExit();
      }
    }
}

2ページ目に。私の問題は、ここでのポップアップが最初の実装と同じように機能しないことです。さらに奇妙なことに、ポップアップはウィンドウのロード時に表示されます...ウィンドウのアンロード前ではありません。

私はこれを数時間見回していじっています。これは簡単に追加できるはずだったので、本当にイライラし始めています。すでに別のページに設定されており、正しく機能しているように見えます。何がうまくいかないのか、または私が愚かな間違いを犯している場合、何か洞察をいただければ幸いです。

ありがとう、

-アラン

4

3 に答える 3

1

1) window.onbeforeunload = displayConfirm();-- 関数を割り当てるのではなく、関数を起動しています。

2)onbeforeunload素晴らしいですが、多くの点でサポートされていません。一部のブラウザーにはそれさえありませんが、期間 (たとえば、最新の Opera を除くすべて) であるため、これを幅広いユーザー向けに行っている場合、または 100% クロスブラウザーで動作させる必要がある場合onbeforeunloadは、残念ながら十分ではありません。そのままで。

于 2012-11-13T23:04:15.093 に答える
1

試してみてください

window.onbeforeunload = displayConfirm;

実際には関数をすぐに呼び出して、displayConfirm()window.onbeforeunload に戻り値を代入しています。

更新 しかしreturn、onbeforeunload-function のステートメントは1 つだけに制限されています。こちらを参照してください。そのため、「確認」またはその他のカスタム関数を呼び出しても機能しません。

于 2012-11-13T23:02:20.797 に答える