funkcja window.onbeforeunload nie wykonać poprawnie w IE. Ponieważ niektóre częściowe informacje zwrotne są również uważane za "próbę opuszczenia strony". Jeśli łącze na stronie ma href = "javascript: ...." (ASP.Net LinkButton jest renderowany w ten sposób), IE niepoprawnie wywoła zdarzenie zwalniania okna po kliknięciu łącza. więc, na bieżąco zmienną dirtyflag i dodano
var __ignoreDirtyFlag = false;
$(document).ready(function() {
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() {
__ignoreDirtyFlag = true;
});
}
});
teraz po stronie załadowaniu odnośników rozpoczął href^= „JavaScript” będzie przypisany tej funkcji. po kliknięciu łącza tworzy on zmienną __ingoreDirtyFlag true; dodaje
window.onbeforeunload = function globalWindowUnload() {
if (!__ignoreDirtyFlag && isDataFilled == true) {
return "You have unsaved changes on this page. If you leave this page, those changes will be lost.";
}
__ignoreDirtyFlag = false;
return;
};
jeśli istnieje jakieś panele aktualizacji asp zostały użyte na stronie, powyżej wiązania link funkcji zostanie usunięty. , więc musimy ponownie powiązać funkcję z łączami, gdy panel aktualizacji zostanie odświeżony.
tak
function foo() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
}
function endRequestHandler(sender, args) {
// Do your stuff
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() {
__ignoreDirtyFlag = true;
});
}
}
i
do ciała sposób znacznik onload, że assinged sposób foo(). <body onload="foo()">
ten siekać działa poprawnie z IE i wszystkich przeglądarek :) dzięki
Ta odpowiedź jest technicznie interesujące. Szkoda, że tak trudno jest czytać. –
Nie widziałem znacznika * jquery * –
Hej, wiem, że ta odpowiedź ma już prawie 3 lata, ale czy sądzisz, że mogłabyś dodać inną wersję odpowiedzi, ponieważ pytanie nie zostało oznaczone jako jquery? –