3

CActiveForm で作成されたフォームがあり、HTML 出力は次のようなものです

...
    <tr>
        <td><input class="span9" placeholder="Type in the seminar title" name="CvSeminar[0][title]" id="CvSeminar_0_title" maxlength="255" value="Some Value" type="text">        <span class="help-inline error" id="CvSeminar_0_title_em_" style="display: none"></span>    </td>
        <td><input class="span1" name="CvSeminar[0][yearIssued]" id="CvSeminar_0_yearIssued" maxlength="4" value="2009" type="text">        <span class="help-inline error" id="CvSeminar_0_yearIssued_em_" style="display: none"></span>    </td>
        <td><a href="#" class="removeSeminarRow"><i style="margin-top: 10px" class="icon-remove"></i></a></td>
    </tr>
    <tr>
        <td><input class="span9" placeholder="Type in the seminar title" name="CvSeminar[1][title]" id="CvSeminar_1_title" maxlength="255" value="Some Value" type="text">        <span class="help-inline error" id="CvSeminar_1_title_em_" style="display: none"></span>    </td>
        <td><input class="span1" name="CvSeminar[1][yearIssued]" id="CvSeminar_1_yearIssued" maxlength="4" value="2006" type="text">        <span class="help-inline error" id="CvSeminar_1_yearIssued_em_" style="display: none"></span>    </td>
        <td><a href="#" class="removeSeminarRow"><i style="margin-top: 10px" class="icon-remove"></i></a></td>
    </tr>
...

ご覧のとおり、各行に 2 つのフィールドが含まれる領域を作成します。ユーザーが新しい行を追加できるボタンも作成しました。ユーザーがボタンを押したときの html 出力は次のとおりです。

<tr>
   <td><input class="span9" placeholder="Type in the seminar title" name="CvSeminar[1000][title]" id="CvSeminar_1000_title" maxlength="255" type="text"><span class="help-inline error" id="CvSeminar_1000_title_em_" style="display: none"></span></td>
   <td><input class="span1" name="CvSeminar[1000][yearIssued]" id="CvSeminar_1000_yearIssued" maxlength="4" type="text"><span class="help-inline error" id="CvSeminar_1000_yearIssued_em_" style="display: none"></span></td>
   <td><a href="#" class="removeSeminarRow"><i style="margin-top: 10px" class="icon-remove"></i></a></td>
</tr>

私の問題は、新しい行を作成して空のままにしたときに始まります。サーバー側での Ajax 検証は正常に機能します。Yii は、新しいフィールドにエラーがあることを示す json で応答します。

{"CvSeminar_1000_title":["Title cannot be empty."],"CvSeminar_1000_yearIssued":["Year cannot be empty"]}

問題はクライアント側にあります。yiiactiveform は新しく追加された行について何も知らないので、新しく追加されたフィールドを含むように yiiactiveform を更新するにはどうすればよいでしょうか?

ありがとう

4

2 に答える 2

1

新しい行を追加するときは、検証する新しい属性でフォーム設定を更新するだけです。

var settings = $(myform).data('settings');
settings.attributes.push({
   ...Validation settings here
});
$(myform).data('settings', settings);

Yii が生成する JavaScript を見て、何を使用すればよいかを理解してください。

于 2012-09-21T13:20:01.573 に答える
0

さて、多くの研究の後、私は解決策を見つけました。最高のものではありませんが、間違いなく最もクリーンです。

yiiactiveformについて何も知らないのでCvSeminar_1000_titleCvSeminar_1000_yearIssued事前に作成しました:

for($i = 1000; $i <= 1050; $i++) {
    $form->textField(new CvSeminar, '['.$i.']title'); 
    $form->error(new CvSeminar, '['.$i.']title'); 
    $form->textField(new CvSeminar, '['.$i.']yearIssued');
    $form->error(new CvSeminar, '['.$i.']yearIssued');
}
  • 注1:はい、知っています!これは最善の解決策ではありませんが、うまく機能します。
  • 注 2: フォーム要素をエコーするのではなくCActiveForm、適切な js ajax 検証を強制的に作成するためにメソッドを呼び出すだけです。
于 2012-09-19T10:12:44.233 に答える