Ситуация: У меня есть веб-страница Grails с двумя таблицами.Одна таблица отображает информацию о персонале (включая определенные флаги), а вторая таблица содержит список флагов с «кнопкой добавления», которая позволяет пользователю добавлять данный флаг к себе.
Теперь естьКнопка «Сохранить», которая при нажатии помещает текущее «состояние» флагов пользователей в нашу базу данных.Поэтому я хочу иметь возможность отображать подсказку, если при попытке пользователя перейти к другой части сайта отображается несохраненная информация.Это достаточно просто с помощью существующего логического значения isDirty, которое хранит каждый флаг.Я могу просто просмотреть активные флаги людей и проверить, не загрязнен ли он.Если у этого человека есть хотя бы один грязный флаг, мне нужно отобразить подсказку, если он попытается уйти, потому что эти данные не будут сохранены, если они явно не нажмут кнопку.
Проблема: Есть много способов отойти от этой страницы.Я использую <body onbeforeunload="checkForDirtyFlags();">
, где checkForDirtyFlags () - это базовая функция js для проверки любых грязных флагов.Но вот в чем дело - когда пользователь добавляет или удаляет флаг, это вызывает перезагрузку страницы, потому что способ настройки страницы состоит в том, чтобы перенаправить на URL-адрес следующим образом:
"http://my.url/addFlag/123456"
Затем контроллер знает, как добавитьфлаг с идентификатором 123456 для текущего человека.Однако это НЕ меняет места, где человек находится на веб-сайте, потому что та же страница по-прежнему отображается (она просто содержит обновленные таблицы).Таким образом, в основном, когда я вижу URL с addFlag или removeFlag, я не хочу запрашивать у пользователя, уверены ли они, что они хотят уйти со страницы, потому что в глазах пользователя они не покидают страницу.
Вопрос: Есть ли способ определить, какой целью является цель во время onbeforeunload
?Чтобы в моем javascript могло быть что-то вроде этого:
function checkForDirtyFlag() {
if( justAdding ) { //We are just adding a flag. No prompt necessary
//Don't do anything
}
else if( justRemoving ) { //We are just removing a flag. No prompt necessary
//Don't do anything
}
else { // In this case, we want to prompt them to save before leaving
alert('You have unsaved data on the page. Leaving now will lose that data. Are you sure you want to leave?');
}
}
Если что-то из этого не понятно, пожалуйста, дайте мне знать, и я постараюсь это выяснить.
Спасибо!