6

ユーザーが現在のページのフォームに何かを入力した場合に、ユーザーが現在のページを離れるのを防ぐ Rails ヘルパーまたは Rails の方法はありますか?

フォームに未保存の変更がある場合にヘッダー リンクをクリックすると、データが失われないようにしようとしています。

4

1 に答える 1

1

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!);
      }
    }
  });
});

編集:わかりました。ヘッダーリンクのクリックのみを処理します(質問で指定したように)。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 固有のヘルパーではありませんが、独自のヘルパーを作成して、このようなものを含むスクリプト タグをビューに吐き出すことができます。すべての入力が空かどうかをチェックするだけでなく、フォーム固有のチェックを入れたいと思うでしょう。私が今までに作ったすべてのフォームは、何らかの形で美しくユニークなスノーフレークでした.

于 2011-03-17T03:11:28.643 に答える