Onbeforeunload не запускается в IE, когда пользователь закрывает окно - PullRequest
1 голос
/ 13 июля 2011

Я отслеживаю каждое поле в своей форме на предмет изменений, привязывая событие «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, а не загружается через встроенный тег сценария.Я не думаю, что это должно иметь значение, но именно поэтому я спрашиваю здесь.

Спасибо.

1 Ответ

1 голос
/ 13 июля 2011

Вы не должны использовать ".attr ()", чтобы получить свойство "value":

if ($('#editObject_blah').val() == 1) {
  return "whatever";
}

Если ваш обработчик не возвращает строку, то браузер предполагает, что вы в порядке, когда пользователь закрывает окно.

Если это не <input>, то вам, вероятно, следует хранить флаг с помощью ".data ()". Для этого вам нужно просто выбрать имя для флага:

$(':input').change(function(){
  $('#editObject_blah').data("changed", 1);
});

function verifyexit() {
  if($('#editObject_blah').data('changed') == 1){
    return "You have not saved changes yet!";
  }
}
...