11

ユーザーがフォーム データを保存せずにページを離れたい場合、確認ダイアログを表示したいと考えています。私が持っているものは次のとおりです。

window.onbeforeunload = function() {
    if (not_saved) if (confirm('Changes will not be saved')) return true;
    return false;
}

しかし、ユーザーが何をクリックしても、結果は同じです。ページを離れたいのか、ページにとどまるのかを尋ねる愚かなハードコードされたダイアログ ボックスです。私が彼らに聞きたいのは、彼らが留まりたいのか、去りたいのかということです。これは可能ですか?ユーザーをページに留めておくためにウェブサイトができることをブラウザーが制限したいのはわかりますが、いくつかのウェブサイト (私が思うに Google ドキュメント) には洗練されたダイアログ ボックスが表示されているのを見たことがあると思います。

4

3 に答える 3

14
window.onbeforeunload = function(e) {
    return 'Dialog text here.';
};

ドキュメント:

Firefox 4以降では、返された文字列はユーザ​​ーに表示されないことに注意してください。

イベントオブジェクトのreturnValue属性が空の文字列でない場合、またはイベントがキャンセルされた場合、ユーザーエージェントは、ドキュメントをアンロードするかどうかを確認するようにユーザーに要求する必要があります。ユーザーエージェントによって表示されるプロンプトには、returnValue属性の文字列、またはその主要なサブセットが含まれる場合があります。(たとえば、ユーザーエージェントは、表示のために文字列を1024文字に切り捨てたい場合があります。)

于 2012-08-26T16:58:54.123 に答える
12

機能しますがwindow.onbeforeunload、悪い習慣と見なされます。次のようなものを使用することをお勧めします。

if (typeof window.addEventListener === 'undefined') {
    window.addEventListener = function(e, callback) {
        return window.attachEvent('on' + e, callback);
    }
}

window.addEventListener('beforeunload', function() {
    return 'Dialog Text Here';
});

最初にwindow.addEventListener存在するかどうかを確認しますが、IE にはありません。存在しない場合はポリフィルしてから、イベントをアタッチします。

于 2012-08-26T17:06:00.240 に答える