Активировать перед загрузкой, если форма не отправлена - PullRequest
4 голосов
/ 13 ноября 2010

У меня есть форма, которая отправляется через PHP с 3 действиями отправки:

  • Сохранить и продолжить
  • Сохранить и выйти
  • Выход без сохранения

Я хотел бы вызвать предупреждение «OnBeforeUnload», которое отображается, если пользователь НЕ нажимает на какие-либо действия формы, чтобы сообщить им, что они покидают страницу, и их изменения могут не произойти.быть сохраненным.

Я попробовал следующий код, но кажется, что unbeforeunload запускается перед моим событием click.Любые предложения о том, как лучше всего достичь этого?

$buttonpressed = false;
$j(".Actions input").click(function(){
    $buttonpressed = true;                                  
});

if(!$buttonpressed){
    window.onbeforeunload = function(){
        return "Your changes may not be saved.";
    }
}

1 Ответ

18 голосов
/ 13 ноября 2010

Вам нужно выполнить проверку внутри обработчика, например:

window.onbeforeunload = function(){
    if(!$buttonpressed){
        return "Your changes may not be saved.";
    }
}

В настоящее время это привязка window.onbeforeunload, когда ваш код выполняется, потому что $buttonpressed равен falseкогда он запускается ... не имеет значения, если он изменится позже, так как вы уже связали обработчик.Альтернатива состоит в том, чтобы сделать это немного проще, например:

window.onbeforeunload = function(){
    return "Your changes may not be saved.";
}
$j(".Actions input").click(function(){
    window.onbeforeunload = null;
});

Это просто удаляет обработчик вместо click.Более подходящим событием для обработки других случаев отправки было бы присоединение к событию submit, например:

$j(".myForm").submit(function(){
    window.onbeforeunload = null;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...