Выбор переключателя на основе значения метки

Обратите внимание, что в вашем коде вы используете onbeforeclose, но имя события beforeunload, поэтому свойство onbeforeunload, а не onbeforeclose.

Я просто хотите работать с этим кодом только для обновления и закрытия браузера. Есть ли способ поймать обновление или просмотр браузера, чтобы он мог его использовать.

Нет. Вместо этого вам нужно будет захватить каждую ссылку и отправить форму и установить флаг, указывающий вашему обработчику onbeforeunload, чтобы он не возвращал строку или не удалял ваш обработчик onbeforeunload (возможно, флаг является более чистым).

Например:

var warnBeforeClose = true;
function unloadPage(){
    if (warnBeforeClose) {
        return "Your changes will not be saved.";
    }
}
window.onbeforeunload = unloadPage;

// ...when the elements exist:
$("a").click(dontWarn);
$("form").submit(dontWarn);
function dontWarn() {
    // Don't warn
    warnBeforeClose = false;

    // ...but if we're still on the page a second later, set the flag again
    setTimeout(function() {
        warnBeforeClose = true;
    }, 1000);
}

Или без setTimeout (но все еще с таймаутом):

var warningSuppressionTime = 0;
function unloadPage(){
    if (+new Date() - warningSuppressionTime > 1000) { // More than a second
        return "Your changes will not be saved.";
    }
}
window.onbeforeunload = unloadPage;

// ...when the elements exist:
$("a").click(dontWarn);
$("form").submit(dontWarn);
function dontWarn() {
    // Don't warn for the next second
    warningSuppressionTime = +new Date();
}

Обновление в 2017 году: Также обратите внимание, что с по крайней мере пару лет назад, браузеры не показывают сообщение, которое вы возвращаете; они просто используют тот факт, что вы вернули что-то другое, кроме null, в качестве флага, чтобы вместо этого отображать собственное встроенное сообщение.

0
задан user721264 24 February 2015 в 19:42
поделиться