7

Consider the following HTML snippet containing some javascript utilizing prompt and unload. The prompt() method works fine but I want alerting something like Goodbye, user when reloading or leaving the page. Any help is greatly appreciated.

<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>
George
  • 2,050
  • 6
  • 26
  • 36
  • What browser are you testing against? According to the MDN, onbeforeunload behaves differently in different browsers: https://developer.mozilla.org/en/DOM/window.onbeforeunload – Levi Hackwith Mar 28 '12 at 12:54

6 Answers6

16

You should write it like this:

window.onunload = goodBye;

Also, you might consider using the onbeforeunload event in some browsers:

window.onbeforeunload = goodBye;

When you write window.onunload = goodBye(); you assign whatever handler that is returned from goodBye to the unload event. Since nothing is returned, there will be no event handler. You need to reference the function instead: window.onunload = goodBye;

David Hellsing
  • 106,495
  • 44
  • 176
  • 212
4

You can't assing this way: window.onunload = goodBye();

If you want to assing this way you have three ways:

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

or

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

And my favourite because it allows you to add more functionality:

// This way you create a event listener which allows you to add as many functions as you ant
window.addEventListener("unload", goodBye, false); 
Javier Cobos
  • 1,172
  • 10
  • 22
1
<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

PraveenVenu
  • 8,217
  • 4
  • 30
  • 39
1

As seen HERE

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

or

window.onbeforeunload = goodBye;

Although I would suggest saving the username to a glob by seting a var outside you load func that receives the username after first prompt, then you dont have to prompt them for their name again when they leave

SpYk3HH
  • 22,272
  • 11
  • 70
  • 81
1

You could do something like this:

var userName = ""; 

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

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

window.onload=promptName();     
window.onbeforeunload = goodBye();
hennson
  • 741
  • 4
  • 7
  • prompt works fine, problem is that I want goodbye message after clicking close button. This code gives goodbye message just after prompt no matter of onunload() or onbeforeunload() – George Mar 28 '12 at 13:06
  • it was just to show you the event. you have to change your code like this function goodBye() { return ("Goodbye, " + userName + "!"); } – hennson Mar 28 '12 at 13:31
0

This works for me, but the accepted answer doesn't. This also supports more browser events.

This can also be used together with various onbeforeunload and beforeunload scripts.

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

doOnUnload(eventType, function(e) 
{
    console.log('godbye');
});
kochauf
  • 356
  • 3
  • 7