2016-04-14 2 views
1

Я один обработчик beforeunload, который вызывается, когда пользователь фактически переходит от страницы:Пропустить beforeunload обработчика, если пользователь остается на страницу из диалогового окна в второй обработчик

$(window).on("beforeunload", function() { 
    cleanup(); 
}); 

Другая часть моего приложения может однако добавить еще один обработчик beforeunload, который запрашивает у пользователя, если он действительно хочет уйти из-за постоянной работы:

$(window).on("beforeunload", function() { 
    return "Do you really want to leave"; 
}); 

Как я могу гарантировать, что второй обработчик всегда будет вызываться первым и что первый обработчик не будет вызывается в случае, если пользователь решает tay на странице?

Я уже пытался использовать событие unload. Но это не сработает, так как он не выполнит мою функцию очистки и бэкэнд-вызов в этой функции надежно.

+1

Попробуйте следующее: http://stackoverflow.com/questions/17759703/is-there-any-way-to-detect-if-user-pressed-stay-on-page-or-leave -page-in-bef –

+0

@ IsmaelMiguel Спасибо, но ни один из ответов в этом вопросе не работает в моем случае. Я не могу использовать таймаут, так как я должен сделать это, когда пользователь уйдет, а не когда он останется. Кроме того, я не могу использовать 'unload', так как он должен делать бэкэнд-вызов в моей функции очистки и использовать' unload', этот вызов иногда не будет выполнен. – basilikum

+0

Вы правы. Эти требования на самом деле разные. Не заметил. Мне очень жаль. –

ответ

1

Вы можете использовать window.confirm в случае. Как и в (псевдокоде)

$(window).on("beforeunload", function() { 
var result = window.confirm('Do you really want to quit?'); 
if (result) { 
    cleanup(); 
} 
} 

Таким образом, если пользователь хочет выйти, он будет очищаться. Это работает?>

+0

Спасибо, но, как я уже сказал, у меня есть разные обработчики, добавленные двумя разными частями моего приложения, и я хотел бы держать вещи в секрете. Поэтому вопрос состоял в том, что я могу как-то заверить порядок, в котором эти обработчики вызываются, и предотвращать все последующие обработчики, если пользователь решает остаться во время диалога в одном конкретном обработчике. – basilikum

+0

Итак, по умолчанию при выгрузке он будет очищать? И вам нужен отдельный обработчик для навигации пользователя, только если пользователь в процессе чего-то делает? –

+0

Да, очистка должна выполняться, когда пользователь действительно уходит, поэтому технически при разгрузке. Однако событие выгрузки не кажется таким надежным, поэтому мне нужно использовать beforeunload. Одна часть моего приложения может начать запись звука и спросит об использовании, если он действительно хочет уйти, если он находится в середине записи. Если он решает остаться, то глобальная очистка не должна называться. – basilikum

 Смежные вопросы

  • Нет связанных вопросов^_^