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>
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;
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);
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
<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
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();
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');
});