我有一个用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>
...
正如你所看到的,我创建了一个区域,每行包含两个字段。我还创建了一个按钮,用户可以在其中添加新行。用户点击按钮时的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以包含新添加的字段?
由于
答案 0 :(得分:1)
添加新行时,只需使用要验证的新属性更新表单设置。
var settings = $(myform).data('settings');
settings.attributes.push({
...Validation settings here
});
$(myform).data('settings', settings);
查看Yii生成的javascript,以便了解要使用的内容。
答案 1 :(得分:0)
嗯,经过大量的研究,我找到了解决方案。不是最好的,但肯定是最干净的。
由于yiiactiveform
对我事先创建的CvSeminar_1000_title
和CvSeminar_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');
}
CActiveForm
创建适当的js ajax验证。