2009-06-18 16 views
1

このレガシーレールのコードベースを継承しています。ページリフレッシュ後でも、指定されたフォームが値を保持している場所(データベースにまだ保存されていない)を修正する必要のあるバグがあります。リフレッシュ後のフォーム保持値

使用例: ユーザーはデータをフォームに入力しますが、送信はしません。 ユーザーブラウザの更新ボタンをクリックします。 フォーム内の値は、ページ全体を更新する代わりに保持されます。

どこから見てもいいですか?簡単に限られたRailsの経験では、これはデフォルトで起こるものではないので、どこかにコード化する必要がありますか?

答えて

0

テルCTRL + F5を押して、ユーザ

- 編集 あなたはブラウザがバグだらけである、または何かしない限り、他のがある場合を除き働く私の経験では、常にpress CTRL+F5にユーザーを(言うことができない場合間違っている)、ちょうど旅行onloadイベントのform.reset()。これにより、フォームのフィールドがデフォルト値にクリアされます。しかし、フィールドにデフォルト値がある場合(<の入力タイプ= "テキスト"の値= "ここに名前を入力"/>)、.reset()を実行すると、デフォルト値にリセットされます。

3

場合によってはブラウザがこれを行います。 (私は、自動補充ドロップダウンについて話しているわけではありません。ブラウザは、部分的に記入され、提出されずにリフレッシュされるフォームについて話しています)。

実際には、HTMLソースウィンドウをチェックして、フィールドの値がRailsアプリから来ていることを確認してください。

以前のエントリのためにブラウザから提供された値は、VALUE属性には含まれませんが、サーバーによって提供された値が使用されます。これを回避するため

いくつかのオプションは次のようになります。

  • POSTを使用してフォームにユーザーを送信します。したがって、リフレッシュが発生すると「再送信しますか」などのメッセージが表示されます。と考えると、ブラウザはこの状況のフィールドを事前に入力します(ユーザーが投稿したときと同じです)。
  • フォームフィールドの値を消去するには、onload()イベントを使用します。

おそらく簡単な解決策があります... Ctrl-F5はときどきトリックですが、以前はうまくいきませんでした。

1

私もこの問題に遭遇しました。さらに<body onload="myform.reset()">は機能しませんでした。これは特に問題です。なぜなら、悪い場合には、隠し入力をカウンタとして使用しているからです(たとえば、ファイルアップロードフィールドの動的な数を追跡するため)。これらは、適用外の警告メッセージが表示されないようにするために、リロード時にリセットする必要があります。私はリンクを優先してリセットボタンを放棄することで、社内での使用を「固定」しました。 <input type="reset"/>の代わりに<a href=".">Reset</a>(ファイル名はindex.php)を使用しています。エレガントなものから遠いですが、それは私の目的のために機能します。

関連する問題