Rails 3 формирует помощника, чтобы предотвратить переход пользователя и потерю изменений? - PullRequest
6 голосов
/ 23 февраля 2011

Есть ли помощник Rails или способ Rails не дать пользователю покинуть текущую страницу, если он что-то набрал в форме на текущей странице?

Я пытаюсь предотвратить потерю данных людьми, если они нажмут на ссылку заголовка, если у них есть несохраненные изменения в форме.

1 Ответ

1 голос
/ 17 марта 2011

Rails не знает о состоянии формы, пока она не отправлена, но вы можете добавить щепотку javascript, чтобы помочь в этом случае.

$('#header > a').click(function(){
  $('input').each(function(i){
    if ( $(this).attr(value) != '' ) {
      if ( confirm('are you sure you want to leave this form unfinished?') != 'true' ) {
        alert('quitter!);
      }
    }
  });
});

edit: Хорошо, так что обрабатывается только нажатие ссылки заголовка (как вы указали в своем вопросе), вот решение, которое использует onbeforeunload. Источник на полную страницу, потому что я проверил его, чтобы убедиться, что я даю вам что-то, на что можно опираться:

<html>
  <head>
    <title>Foo</title>
    <script>
      window.onbeforeunload = function(){
        var inputs = document.getElementsByTagName('input');
        var unfinished = 'false';
        for (var i=0; i<inputs.length; ++i) {
          if ( inputs[i].value != '' ) {
            unfinished = 'true';
          }
        }
        if ( unfinished == 'true' ) {
          return 'Are you sure you want to leave?';
        }
      }
    </script>
  </head>
  <body>
    <form>
      <input name='foo'/>
      <input type='submit'/>
    </form>
    <a href='/'>Leave</a>
  </body>
</html>

Конечно, это не специфичный для Rails помощник, но вы можете написать свой собственный помощник, чтобы выложить тег скрипта с чем-то вроде этого в ваши представления. Вы, вероятно, также захотите поставить специфичные для формы проверки вместо того, чтобы просто проверять каждый ввод на пустоту. Каждая форма, которую я когда-либо делал, была красивой и уникальной снежинкой в ​​той или иной форме.

...