2012-02-23 5 views
0

私はユーザーがデータを入力すると計算を実行するフォームを持っています。ただし、一部の計算では、特定のフィールドを最初に入力する必要があります。例えばHTMLフォームが特定の順序で記入されていることを確認しますか?

、私は4つのフィールドを持ち、フィールド4はフィールド1の割合であるならば、私は彼らがフィールド4.

にデータを入力することができます前に、ユーザーがフィールド1の値を持っていることを確認する必要があります私が考えているのは、各フィールドに連続番号を持つデータステップ属性を与えることです。最初にフォームが表示されると、最初のフィールドを除くすべてのフィールドが無効になります。有効なデータが最初のフィールドに入力されると、次のステップのフィールドが有効になります。これはまた、ユーザーがフィールド1を空白にして残りのフィールドをブランクアウトし、再び無効にすると仮定しています。

このソリューションはうまくいくはずですが、正しく動作するようにJSコード(jQuery)を必要とし、サーバー側の検証も必要になります。しかし、私が少し戸惑っているのは、提出してサーバー側の検証が失敗し、フォームを再びレンダリングし、フォームフィールドの無効/有効状態を維持する方法です。しかし、私は、現在の問題の後でその問題に取り組むだろうと思う。

これは、順番に記入しなければならないフォームの問題に対するまともな解決策ですか?他の誰かが私が実装しようとしているものよりも優れた解決策やより洗練された方法を見つけましたか?私は一般的な概念やアイデアでうまくいく。私は必要なものをかなりコード化することができますが、私はこの特定の問題のベストプラクティスを確信していません。

+0

なぜデフォルト値を使用しないのですか? – Andrew

答えて

1

注文を確認する必要はなく、間違った書式のケースを除外する必要があるようです(たとえば、フィールド4が入力され、フィールド1が入力されていないなど)。

ユーザーが希望するものを入力できるようにすることをお勧めします。ただし、空欄である限り必要なフィールドを強調表示し、すべてが正しければフォームを送信しないようにしてください。

+0

計算には前のフィールドのデータが必要であるため、順序も検証する必要があります。フィールド4の値はフィールド1の値のパーセンテージであるため、フィールド1にはパーセント値を入力する必要があります。だから私はユーザーに何でも入力させると、それは多くの問題を引き起こすでしょう。あなたは無効なデータを排除する必要があるということは間違いありませんが、私の特定の状況ではその順序は同じくらい重要です。 –

+0

ユーザーが最初のフィールドに200を入力し、次に4番目のフィールドに25%を入力してから、最初のフィールドの内容を300に置き換えたとします。このユーザーの動作を禁止する必要がありますか? – penartur

+0

いいえ、それはユーザーができる必要があるものです。ユーザーは計算を実行するためにデータを入力しており、この計算は入力時に実行中です。したがって、フィールド1に200を入力すると、200と表示されているコンテナがあります。別のフィールドに25%を入力すると、コンテナは250(200 + 0.25(200))のように更新されます。ユーザーがフィールド1を100に変更すると、コンテナに125(100 + .25(100))が表示されます。ただし、ユーザーがフィールド1の数値を削除した場合、パーセントフィールドも空白にして、何も計算を実行しないようにする必要があります。 –

1

あなたが提案しているのはこれを行う良い方法です。 JSコードはあまり巨大ではありません。フィールドでクラス名を使用して、アクティブなクラス名を判別できます。いくつかのJS変数や隠しフィールドを返すことで、サーバ側の検証の後にアクティブになっているページを伝えることができます。

0

なぜクライアント側で値を検証しないのですか?ちょうどあなたが思ったように処理してください。 onchangeイベントハンドラを入力に設定し、ハンドラで値を検証します。正しい場合は、次の入力を有効にします。間違っていると、現在の不快感が残ります。ほんの数行のスクリプトが必要です。

+0

私はクライアント側とサーバー側を検証する予定です。 –

-2
 if(option1 == "" && option2 != "") 
     { 
      alert("Please fill options in a Sequence"); 
     } 
     else if(option2 == "" && option3 != "") 
     { 
      alert("Please fill options in a Sequence"); 
     } 
     else if(option3 == "" && option4 != "") 
     { 
      alert("Please fill options in a Sequence"); 
     } 
     else if(option4 == "" && option5 != "") 
     { 
      alert("Please fill options in a Sequence"); 
     } 
+0

[編集]リンクを使用して、このコードの仕組みを説明してください。将来の読者を助ける可能性が高い –