1

再会。我的问题是我有一个包含三个选项的下拉列表:A、B、C。我需要做的是根据用户选择的内容显示一个文本字段。

示例:用户选择 A => 它将显示文本字段 AA(应为必填且不为空)用户选择 B => 它将显示文本字段 BB(应为必填且非空)用户选择 C ​​=> 它将显示文本字段 CC (这应该是必需的,而不是空的)

谁能帮帮我吗?谢谢你。

编辑:它现在正在工作。现在唯一的问题是,当我将所选文本字段留为空白并显示错误时,显示的文本字段(取决于下拉列表值的文本字段)消失或返回状态显示:隐藏。这发生在“文本字段不能为空白”错误消息之后。dropdownList 的初始选择值仍然存在并且仍然是焦点,但文本字段消失了。

这是我更新的代码:

看法:

    <div class="row">
    <?php echo $form->labelEx($model,'org_type'); ?>
    <?php echo $form->dropDownList($model,'org_type', $model::getOrgType(), array('prompt'=>'', 'id'=>'orgType')); ?>
    <?php echo $form->error($model,'org_type'); ?>
</div>

<div class="row" style="display:none" id="sec">
    <?php echo $form->labelEx($model,'sec_ref'); ?>
    <?php echo $form->textField($model,'sec_ref', array('id'=>'secField')); ?>
    <?php echo $form->error($model,'sec_ref'); ?>
</div>

<div class="row" style="display:none" id="dti">
    <?php echo $form->labelEx($model,'dti_ref'); ?>
    <?php echo $form->textField($model,'dti_ref', array('id'=>'dtiField')); ?>
    <?php echo $form->error($model,'dti_ref'); ?>
</div>

<div class="row" style="display:none" id="cda">
    <?php echo $form->labelEx($model,'cda_ref'); ?>
    <?php echo $form->textField($model,'cda_ref', array('id'=>'cdaField')); ?>
    <?php echo $form->error($model,'cda_ref'); ?>
</div>

模型:

    public function addCustomError($attribute, $error) {
    $this->customErrors[] = array($attribute, $error);
}

/**
 */
protected function beforeValidate() {
    $r = parent::beforeValidate();

    if ($this->org_type == 'Single') {//this is the checkbox

        $this->validatorList->add(CValidator::createValidator('required',$this,'dti_ref',array()));

    }

    if ($this->org_type == 'Partnership') {//this is the checkbox

        $this->validatorList->add(CValidator::createValidator('required',$this,'sec_ref',array()));

    }

    if ($this->org_type == 'Corporation') {//this is the checkbox

        $this->validatorList->add(CValidator::createValidator('required',$this,'sec_ref',array()));

    }

    if ($this->org_type == 'Cooperative') {//this is the checkbox

        $this->validatorList->add(CValidator::createValidator('required',$this,'cda_ref',array()));

    }
    foreach ($this->customErrors as $param) {
        $this->addError($param[0], $param[1]);
    }
    return $r;
}

浏览器上的 Javascript:

<script>
"$('#orgType').change(function(){
if($('#orgType').val() == 'Single')
{
    $('#dti').show();
    $('#dtiField').addClass('required');
    $('#cda').hide();
    $('#sec').hide();

}
if(($('#orgType').val() == 'Partnership') || ($('#orgType').val() == 'Corporation'))
{
    $('#sec').show();
    $('#secField').addClass('required');
    $('#dti').hide();
    $('#cda').hide();
}
if($('#orgType').val() == 'Cooperative')
{
    $('#cda').show();
    $('#cdaField').addClass('required');
    $('#dti').hide();
    $('#sec').hide();
}
return false;
})";

4

1 回答 1

0

你可以试试这个:

在 DropDown 的每个更改事件之后您可以将值设置为文本 Filed ..

于 2013-05-07T10:19:35.743 回答