如何在Yii框架中动态更改表单字段

时间:2014-07-29 06:34:11

标签: php forms yii

我是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验证。

1 个答案:

答案 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()参数来定义要验证的属性。