This seems like a common question but search is not returning anything.
I have the following code that executes before the page unloads.The problem is if the unload is a postback i do not want to fire my warning to the user but i can't figure out how to differentiate between a postback and a user navigating to another page for example.
// This is executed before the page actually unloads
$(window).bind("beforeunload", function () {
if (prompt) {
//prompt
return true;
}
else {
//reset our prompt variable
prompt = true;
}
})
Running script in the code behind i.e. if Page.IsPostBack then set prompt is not an option.
Any ideas?
EDIT:
Here is the solution I ended up with:
function DoNotPrompt() {
prompt = false;
}
I then added this to all the controls where the user could do something that result in a post back.
OnClientClick="DoNotPrompt()
Then checked this flag and only returned a string in "beforeunload" if the user was really moving away from the page i.e. not a postback.
I also had to use this code: var magicInput = document.getElementById('__EVENTTARGET');
if (magicInput && magicInput.value) {
// the page is being posted back by an ASP control
prompt = false;
}
The reason being i had a custom user control that was a list box and I could not add the above method. So used this to catch that event and set the flag to false.
Not the most elegent solution.
Thanks, Michael
You can capture the submit and reset the onbeforeunload as:
jQuery(function($) {
var form = $('form'), oldSubmit = form[0].onsubmit;
form[0].onsubmit = null;
$('form').submit(function() {
// reset the onbeforeunload
window.onbeforeunload = null;
// run what actually was on
if(oldSubmit)
oldSubmit.call(this);
});
});
This is a tested code from my pages :)
This may not cover all of the postback situations, but you can tell if the page was posted back by an ASP control by interrogating the __EVENTTARGET
hidden input.
This input is set by ASP when the page is posted back by an ASP control.
var magicInput = document.getElementById('__EVENTTARGET');
if (magicInput && magicInput.value) {
// the page is being posted back by an ASP control
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With