Я отслеживаю каждое поле в своей форме на предмет изменений, привязывая событие «change» ко всем входным полям, и устанавливаю флаг, если что-то изменяется.
Затем я привязываюсь к window.onbeforeunload и проверяю этот флаг, возвращаяпредупреждение, если установлен флаг.Согласно документации Jquery API, я связываюсь непосредственно с window.onbeforeunload против $ (window), чтобы избежать проблем с памятью.
Для этого у меня есть следующий код:
$(':input').change(function(){
if($('#editObject_blah').attr('value') == 0){
$('#editObject_blah').attr('value',1)};
}
);
window.onbeforeunload=verifyexit;
function verifyexit() {
if($('#editObject_blah').attr('value') == 1){
return'You have not saved your changes!';
}
};
РЕДАКТИРОВАТЬ:Элемент editObject_blah на самом деле таков:
<form id="editObject_blah" onSubmit="return false;" value=0>
Это отлично работает в Firefox и Chrome, но не может поймать пользователя, закрывающего окно браузера в IE 7.
Я должен отметить, что вышекод вызывается через eval () в результате запроса ajax, а не загружается через встроенный тег сценария.Я не думаю, что это должно иметь значение, но именно поэтому я спрашиваю здесь.
Спасибо.