Javascript onload и onunload - PullRequest
       19

Javascript onload и onunload

4 голосов
/ 28 марта 2012

Рассмотрим следующий фрагмент HTML, содержащий некоторый JavaScript, использующий prompt и unload.Метод prompt() работает нормально, но я хочу предупредить что-то вроде Прощай, пользователь при перезагрузке или выходе из страницы.Любая помощь приветствуется.

<body onload="promptName()" >


        <script type="text/javascript">
        function promptName()
        {
            var userName = prompt("What's your name ?", "")
            return userName;
        }

        function goodBye()
        {
            alert("Goodbye, " + promptName() + "!");
        }

        window.onunload = goodBye();

        </script>

  </body>

Ответы [ 6 ]

12 голосов
/ 28 марта 2012

Вы должны написать это так:

window.onunload = goodBye;

Кроме того, вы можете рассмотреть возможность использования события onbeforeunload в некоторых браузерах:

window.onbeforeunload = goodBye;

Когда вы пишете window.onunload = goodBye();, вы назначаете что угоднообработчик, который возвращается от goodBye к событию unload.Поскольку ничего не возвращается, обработчик событий не будет.Вместо этого вам нужно обратиться к функции: window.onunload = goodBye;

3 голосов
/ 28 марта 2012

Вы не можете действовать таким образом: window.onunload = goodBye ();

Если вы хотите действовать таким образом, у вас есть три способа:

// by this way you use the name of the function, so you override the onunload function with goodBye function
window.onunload = goodBye;

или

  // This way you redefine the function
    window.onunload = function(){goodBye()};

И мой любимый, потому что он позволяет добавить больше функций:

// This way you create a event listener which allows you to add as many functions as you ant
window.addEventListener("unload", goodBye, false); 
1 голос
/ 28 марта 2012

Вы можете сделать что-то вроде этого:

var userName = ""; 

function promptName()
{
    userName = prompt("What's your name ?", "")
    return userName;
}

function goodBye()
{
   alert("Goodbye, " + userName  + "!");
}

window.onload=promptName();     
window.onbeforeunload = goodBye();
1 голос
/ 28 марта 2012

Как видно ЗДЕСЬ

window.onbeforeunload = function() {
    alert("Goodbye, " + promptName() + "!");
};

или

window.onbeforeunload = goodBye;

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

1 голос
/ 28 марта 2012
<body onload="promptName()" >


        <script type="text/javascript">
        function promptName()
        {
            var userName = prompt("What's your name ?", "")
            return userName;
        }



        window.onbeforeunload = function() {
    alert("Goodbye, " + promptName() + "!");
}
        </script>

  </body>

onbeforeunload

0 голосов
/ 23 октября 2017

Это работает для меня, но принятый ответ - нет. Это также поддерживает больше событий браузера.

Это также можно использовать вместе с различными скриптами onbeforeunload и beforeunload.

var doOnUnload = window.attachEvent || window.addEventListener;
var eventType = window.attachEvent ? 'onunload' : 'unload';

doOnUnload(eventType, function(e) 
{
    console.log('godbye');
});
...