1

フィールドが動的に追加されたフォームがあります。

function addFieldRow() {
  $('.form-container').append('
    <div><input type="text" name="name[1]"></div>
    <div>
      <select name="choice[1]">
        <option value="red">red</option>
        // . . .
      </select>
    </div>
     // . . .
  ');
}

次に、宣言された配列 form_validation ルールを使用して、これらをそれぞれの CodeIgniter コントローラーに渡します。

$this->form_validation->set_rules('name[]', 'text field', 'required');
// . . . other fields' rules

問題は、動的に追加されたフォームのいずれかにエラーがある場合、これらはビューの読み込み中に消えてしまうことです。検証がエラーで実行された後、動的に追加されたフォームフィールドを保持する方法を知りたい:

if ($this->form_validation->run() == FALSE) {
  // do stuff to preserve the dynamically created fields to show their errors
  $this->load->view('user_addresses_view');
}

より良い解決策

ajaxCodeIgniter フレームワークでフォームのそれぞれのコントローラーに接続するために使用して、これらの動的に追加された要素を保持するソリューションを見つけました。このメソッドは次のことができます。

  1. ページを更新せずにクライアント側とサーバー側の検証を行う
  2. ページは更新されないため、これらの動的に追加されたフォーム要素はすべて消えません!

james246によるソリューション

4

2 に答える 2

1

ページが実際に更新され、行がクライアント側に追加されるため、それを行うことはできません。検証が完了すると、検証エラーで同じページにリダイレクトされます。ダイナミックに追加された DOM は表示されません。コード...だからできることは、使用sessionしてロード時に手動で検証してページに追加することだけです。

SESSIONより複雑なヘルパーや検証メソッドなどをコーディングする必要があるため、使用はお勧めできません...

その他の可能な解決策

  1. jQuery.validate動的に追加された行 ( fields 、 dom ) を検証できるプラグインを使用します。

  2. mysqlを利用して、これらのフィールドをデータベースに追加し、エラーがdbに保存されている可能性があり、それをビューファイルに送信します。

于 2013-01-25T09:45:13.023 に答える