1

良い一日。私の問題は、A、B、C の 3 つのオプションを持つ dropDownlist があることです。ユーザーが選択した内容に応じてテキストフィールドを表示する必要があります。

例: ユーザーが A を選択 => テキストフィールド AA が表示されます (これは必須で空ではありません) ユーザーが B を選択しました => テキストフィールド BB が表示されます (これは必須で空ではありません) ユーザーが C を選択しました => テキストフィールド CC が表示されます(これは必須であり、空ではありません)

誰でも私を助けてもらえますか?ありがとうございました。

編集:それは今働いています。唯一の問題は、選択したテキストフィールドを空白のままにしてエラーを表示すると、表示されたテキストフィールド (ドロップダウンリストの値に依存するもの) が消えるか、display:hidden の状態に戻ることです。これは、「テキスト フィールドを空白にすることはできません」というエラー メッセージの直後に発生します。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