0

このためのjsfiddleはhttp://jsfiddle.net/whDm6/18/にあります

次のコードでアラートのコメントを解除し、フォームの値を変更してページを更新すると、アラートが表示されます。したがって、コードはその時点まで実行されていることがわかります。ただし、アラートをコメントアウトしたままにすると、期待どおりにアンロード前のボックスが表示されません。

bindを使用し、基本的なwindow.onbeforeunload = function(){}をJqueryでバインドせずに使用してみましたが、いずれも機能しませんでした。

Jquery1.8.2の使用

var currentUlValues = {};
currentUlValues['input1'] = "red";
currentUlValues['input2'] = "blue";
needToConfirm = true;

$(window).on('beforeunload', function(){
    if (needToConfirm) {
        $.each(currentUlValues, function(key, value) {
            var elem = $("#"+key).val();
            if (typeof elem !== 'undefined') {
                if (elem != currentUlValues[key]) {
                    //alert(elem + " - " + currentUlValues[key]);
                    return 'Are you sure you want to leave?';
                }
            }
        });
    }
});

HTMLフォーム

<form>
    <input id="input1" name="input1" type="text" value="red" />
    <input id="input2" name="input2" type="text" value="blue" />
</form>
4

4 に答える 4

2

のコールバック関数から返されますが.each、これは間違ったスコープにあり、その外側の文字列を返す必要があります。

動作デモ:

$(window).on('beforeunload', function(){
    var is_return = false;
    if (needToConfirm) {
        $.each(currentUlValues, function(key, value) {
            var elem = $("#"+key).val();
            if (typeof elem !== 'undefined') {
                if (elem != currentUlValues[key]) {
                    is_return = true;
                    // here return false is to stop the iterate
                    return false;
                }
            }
        });
        if (is_return) {
            return 'Are you sure you want to leave?';
        }
    }
});

</p>

于 2012-10-25T07:35:11.853 に答える
0

関数の代わりに無名関数をreturn返す$.eachbeforeunload

于 2012-10-25T07:30:45.267 に答える
0

こちらの回答を参照してくださいダイアログ ボックスが 1 秒間実行されて消えますか? 短いことわざ:

beforeunload はブラウザに組み込まれたメソッドを利用します。文字列を返す必要があります。ブラウザは文字列を表示し、ページを離れたいかどうかをユーザーに尋ねます。

独自のダイアログ ボックス (または jQueryUI モーダル ダイアログ) を使用して beforeunload をオーバーライドすることはできません。

于 2012-10-25T07:30:46.120 に答える
-1

多分あなたは使うべきです

return confirm('Are you sure you want to leave?');
于 2012-10-25T07:27:05.153 に答える