我是Yii框架的新手,我正在设计一个表单(我使用创建表单)在数据库中创建一行。 让我简单地解释这个场景,这样我就可以清楚地说明我想要的东西 -
我有10个这种形式的字段。在这10个字段中,五个字段动态变化。 我创建了两个div基本上是div A和div B,并根据两个案例的要求重复了这些字段。 假设某些字段是div A中的文本字段,将是div B中的下拉列表。
<div id="A">
<?php echo $form->labelEx($model,'selectionList'); ?>
<?php echo $form->textArea($model,'selectionList',array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'selectionList'); ?>
</div>
<div id="B">
<?php echo $form->labelEx($model,'selectionList'); ?>
<?php echo $form->dropdownList($model,'selectionList',array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'selectionList'); ?>
</div>
我有两个radiobutton说单和多。当我选择单个单选按钮时,应考虑div A并丢弃div B,当我选择 Multi 时,反之亦然。 那么,这是动态更改表单字段的正确方法吗?或者我怎样才能使用Ajax验证。
答案 0 :(得分:1)
与问题无关:
1)您对所有字段使用相同的名称,因此只提交最后一个(检查生成的html,名称为MyModel[selectionList]
而不是MyModel[][selectionList]
2)由于CActiveForm将通过php生成js代码,因此Ajax验证和动态字段(通过js生成)会遇到很多问题。
与问题相关:
3)要使用一个或另一个字段,我建议你有两个单独的字段名称,只需用js / css一个隐藏,现在就不需要了。提交后,只需检查单选按钮的值并确定将保存哪些字段。
要验证这些输入,您必须使用模型方案(将在规则中定义要验证的内容和不验证的内容):
$model = MyModel();
if ($_POST['C'] == 'multi') {
$model->scenario = 'validateOnlyFirstField';
} else {
$model->scenario = 'validateOnlySecondField';
}
您还可以使用第二个CActiveForm.validate()
参数来定义要验证的属性。