【问题标题】:how to change form fields dynamically in Yii framework如何在 Yii 框架中动态更改表单字段
【发布时间】:2014-07-29 15:03:01
【问题描述】:

我是 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>

我有两个单选按钮,分别是 SingleMulti。当我选择 Single 单选按钮时,应该考虑 div A 而丢弃 div B,当我选择 Multi 时,反之亦然。 那么,这是动态更改表单字段的正确方法吗?否则我该如何使用 Ajax 验证来做到这一点。

【问题讨论】:

    标签: php forms yii


    【解决方案1】:

    与问题无关:

    1) 您对所有字段使用相同的名称,因此只会提交最后一个(检查生成的 html,名称是 MyModel[selectionList] 而不是 MyModel[][selectionList]

    2) Ajax 验证和动态字段(通过 js 生成)会遇到很多问题,因为 CActiveForm 将通过 php 生成 js 代码。

    相关问题:

    3) 要使用一个或另一个字段,我建议你有两个单独的字段名称,然后用 js/css 隐藏一个,现在不需要。提交后,只需检查单选按钮的值并决定将保存哪些字段。

    要验证这些输入,您必须使用模型场景(将在规则中定义要验证的内容和不验证的内容):

    $model = MyModel();
    if ($_POST['C'] == 'multi') {
        $model->scenario = 'validateOnlyFirstField';
    } else {
        $model->scenario = 'validateOnlySecondField';
    }
    

    您还可以使用第二个CActiveForm.validate() 参数来定义要验证的属性。

    【讨论】:

    • 嗨@Justinas,我遇到了同样的问题,当我尝试提交表单时,第二个 div 中的字段被第一个单选按钮覆盖
    • 现在,我将参数附加到 URL 并基于参数我将考虑 div。这是一个好习惯吗?
    • @user3004356 与通过 _POST 发送相同。您必须使用唯一的输入名称来发送这两个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多