Как собрать возвращаемое значение onbeforeunload - PullRequest
11 голосов
/ 05 июля 2011

Отображается предупреждающее сообщение, если пользователь пытается закрыть окно без сохранения формы.

window.onbeforeunload = askConfirm;

    function askConfirm()
    {
        // needToConfirm is set to true if any changes are there in the form
        if (needToConfirm)
        {
            return "Your unsaved data will be lost.";
        }       
    } 

    function call_this_if_user_clicks_on_cancel()
    {
       // Bla bla bla
       // After this user should remain on the same page.
    }  

Теперь я хочу вызвать другую функцию, когда пользователь нажимает Okay.А остальной функционал должен оставаться таким же.Так как же мне собрать onbeforeunload возвращаемое значение и вызвать другую функцию?

РЕШЕНИЕ:

    needToConfirm = false; 
    window.onbeforeunload = askConfirm;
    window.onunload = unloadPage;
    isDelete = true;

    function unloadPage()
    {
        if(isDelete)
        {
           call_this_if_user_clicks_on_cancel() 
        }   
    }

    function askConfirm()
    {
        alert("onbeforeunload");
        if (needToConfirm)
        {
            // Message to be displayed in Warning.
            return "Your data will be lost.";
        } 
        else
        {
            isDelete = false;
        }   
    }

Спасибо, Алекс.

1 Ответ

9 голосов
/ 05 июля 2011

Я не уверен; Но я бы подумал, что вы не можете вызывать другую функцию, как профилактическую меру браузером, чтобы она не попала в ловушку при выходе со страницы.

Я думаю, что только браузер знает, возвращает ли он значение true / false, чтобы определить, была ли страница выгружена (или нет).

Ранее unbeforeunload был нестандартным (из IE4, но поддерживается другими браузерами) Вот документы Mozilla https://developer.mozilla.org/en/DOM/window.onbeforeunload И документы Microsoft: http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx

Однако, похоже, что BeforeUnloadEvent был в предложении HTML5. Этот документ подробно описывает шаги, которые происходят, когда документ выгружается (интересно читать):

http://www.w3.org/TR/html5/history.html#beforeunloadevent


В качестве обходного пути: Вы можете получить необходимую информацию из «события разгрузки», если событие unload не вызывается после onbeforeunload, вы можете предположить, что пользователь решил остаться на вашей странице.

https://developer.mozilla.org/en/DOM/window.onunload

...