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 предоставляет возможный обходной путь.

Другие вопросы по тегам