Rails 3形成帮助,以防止用户导航和丢失更改?

Amy*_*Amy 6 forms onbeforeunload onunload ruby-on-rails-3

是否存在Rails帮助程序或Rails方法,如果用户在当前页面上的表单中输入内容,则会阻止用户离开当前页面?

如果他们在表单中有未保存的更改时单击标题链接,我试图阻止人们丢失数据.

Uni*_*key 2

在提交表单之前,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!);
      }
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

编辑:好的,这样只处理标题链接点击(就像您在问题中指定的那样),这是一个使用 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>
Run Code Online (Sandbox Code Playgroud)

当然,这不是 Rails 特定的帮助程序,但您可以编写自己的帮助程序,将包含类似内容的脚本标记吐出到您的视图中。您可能还希望进行特定于表单的检查,而不仅仅是检查每个输入是否为空。我制作的每一种形式都是美丽而独特的雪花。