window.onbeforeunload не стреляет
Я создал довольно ajax-тяжелое веб-приложение и использую window.onbeforeunload
событие, чтобы обнаружить, есть ли несохраненные изменения пользователем и препятствовать тому, чтобы он ушел со страницы. Код загружается моей функцией init и используется для всех браузеров, которые поддерживают это событие. Однако внезапно событие onbeforeunload перестало запускаться во всех браузерах без видимой причины. Я использую JQuery 1.7.1, и есть много событий, связанных с различными элементами (либо через делегирование или напрямую). У кого-нибудь есть подсказка, в чем здесь может быть проблема? Вот фрагмент кода:
$(document).ready( function() {
window.onbeforeunload = function(e) {
if($(window).data("confirm") > 0)
return "You have unsaved changes";
else
return null;
};
});
ps Даже если я полностью удаляю проверку из колбэка и всегда возвращаю строку, которая должна вызывать сообщение каждый раз, она все равно не срабатывает. Я проверил, что мои браузеры правильно работают с событием с простыми страницами, которые привязывают к нему обратный вызов.
2 ответа
<script>
window.onbeforeunload = function (e) {
e = e || window.event;
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = 'Any string';
}
// For Safari
return 'Any string';
};
</script>
Возможная причина этого - использование функции автозаполнения в jQuery UI. Версии начиная с версии 1.8.17 unbeforeunload
, который отключает существующие обработчики.
http://bugs.jquery.com/ticket/12061 утверждает, что ошибка была исправлена, но в моем тестировании она все еще была в jQuery UI 1.9.2.
http://bugs.jqueryui.com/ticket/8439 предоставляет возможный обходной путь.