如何删除该领域的客户端验证,如果该复选框取消选中是(How to remove the client

2019-10-17 15:39发布

在这里我的方案是,如果该复选框取消选中,则对应的字段将被然后禁用残疾人领域的客户端验证不应执行此例如,如果我取消选中的复选框(已为人父),则与该复选框场像父亲姓,名......因此,对这些领域的客户端验证不应该执行。 如果我再次检查复选框,然后在客户端验证应执行

在这里我的问题是当我取消选中该复选框也是客户端验证正在发生的事情和形式不submiting任何一个可以帮助我在这种情况下。 下面是我的示例代码

<?php echo $form->checkBox($modelFamilyFather, '[1]type',   array('id'=>'type', 'checked'=>'checked','onChange' => "
    if(this.value==checked)
    {

         $('#" . CHtml::activeId($modelFamilyFather, '[1]firstname') .
    "').removeAttr('disabled','disabled');

            $('#" . CHtml::activeId($modelFamilyFather,
    '[1]lastName') . "').removeAttr('disabled','disabled');



         $('#" . CHtml::activeId($modelFamilyFather, '[1]occupation') .
    "').removeAttr('disabled','disabled');

    $('#" . CHtml::activeId($modelFamilyFather, '[1]averageMonthlyIncome') .
    "').removeAttr('disabled','disabled');

    }

    else {
        $('#" . CHtml::activeId($modelFamilyFather, '[1]firstname') .
    "').attr('disabled','disabled');

            $('#" . CHtml::activeId($modelFamilyFather,
    '[1]lastName') . "').attr('disabled','disabled');



         $('#" . CHtml::activeId($modelFamilyFather, '[1]occupation') .
    "').attr('disabled','disabled');

    $('#" . CHtml::activeId($modelFamilyFather, '[1]averageMonthlyIncome') .
    "').attr('disabled','disabled');

    }



    "))." <label for='Father'>Has a Father</label>";

    ?>

Answer 1:

你可以使用场景来做到这一点。

更改$ modelFamilyFather您的验证规则,包括“关于” =>“hasFather”。 例:

array('firstname, lastName, occupation, averageMonthlyIncome', 'required', 'on' => 'hasFather'),

激活仅针对“hasFather”方案中的规则。

然后编辑控制器的performAjaxValidation方法来改变场景时复选框的值发生变化:

我不知道你的形式,复选框的名字(是叫“类型”?),或模型,这样你就需要更换“你的外形名”和“checkBoxName”下面。

protected function performAjaxValidation($model)
{
    if(isset($_POST['ajax']) && $_POST['ajax']==='your-form-name')
    {
        if($_POST['ModelFamilyFather']['checkBoxName'] == 1){
            $model->scenario = 'hasFather';
        }
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
}

然后,你还需要编辑需要从表单的输入方法。 同样,我不知道该名称或代码的部分看起来像什么,但你需要做的是这样的:

if(isset($_POST['ModelFamilyFather']))
{
    $model->attributes=$_POST['ModelFamilyFather'];
    if($model->checkBoxName == 1)
        $model->scenario = 'hasFather';
    if($model->save())
        $this->redirect(array('view','id'=>$model->id));
}

替换“ModelFamilyFather”与您的模型的名称,并checkboxName您的复选框的名字。

其他三件事情你需要检查:

  1. 请确保您有您的模型中的复选框的属性。 如果不这样做,你需要做一个。
  2. 选中复选框的默认值为0。所以在你的控制器,你的模型发送到表单之前,加$模型 - > checkBoxName = 0;
  3. 请确保您的窗体有“enableAjaxValidation” =>真的,“enableClientValidation” =>真实,

我有我自己的模型本地测试这个,属性和复选框,它的工作。



文章来源: How to remove the client validation for the fields if the check box is uncheck
标签: php yii