如何检查 yii2 中 OR 条件的验证?
How to check validation in OR conditions in yii2?
我的表单中有两个单选按钮和两个文本输入:personID
和 otherPerson
。用户应该 select 第一个单选然后填写 personID textInput 或选择第二个单选然后 otherPerson
textInput 将启用并可以填写 otherPerson
。同时只有一个选择,必须填写其中一个。
如何在客户端检查所需的验证?如果启用第一个无线电,则 personID
是必需的,否则 otherPerson
。我已经按照代码尝试了,但它不起作用。
['personID', 'required', 'when' => function ($model) {
return $model->rdPerson== 0;
}, 'whenClient' => "function (attribute, value) {
return $('input[name=rdPerson]').val()==0;
}"]
['otherPerson', 'required', 'when' => function ($model) {
return $model->rdPerson== 1;
}, 'whenClient' => "function (attribute, value) {
return $('input[name=rdPerson]').val()==1;
}"]
如何解决这个问题?
我的表格:
<?= $form->field($model, 'rdPerson')->radio(['name' => 'rdPerson', 'value' => 0]); ?>
<?php echo $form->field($model, 'personID')->textInput(); ?>
<?= $form->field($model, 'rdPerson')->radio(['name' => 'rdPerson', 'value' => 1])?>
<?php echo $form->field($model, 'otherPerson')->textInput(); ?>
您需要对您的表单字段和您在 whenClient
中使用的脚本添加一些更改,不要手动提供输入名称,因为它们是由 ActiveForm
自动生成的,请更改您的字段定义使用分组单选按钮,这意味着不是使用 name='rdPerson'
或 $form->field($model,'rdPerson')
,而是使用数组名称将它们分组,如 $form->field($model,'rdPerson[]')
。因为否则您使用它的方式将始终检索第一个单选按钮,只要您的 whenClient
被字段 personId
或 otherPerson
触发,因此不会工作。
同样在 whenClient
中,您应该检查 :checked
单选按钮的值,而不是直接访问 .val()
,因此 checked
单选按钮的值为检索到。
将表单字段更改为
<?= $form->field($model, 'rdPerson[]')->radio(['value' => 0,'uncheck'=>null]); ?>
<?php echo $form->field($model, 'personID')->textInput(); ?>
<?= $form->field($model, 'rdPerson[]')->radio(['value' => 1,'uncheck'=>null]) ?>
<?php echo $form->field($model, 'otherPerson')->textInput(); ?>
并将您的模型规则更新为以下内容
[['personID'], 'required', 'when' => function($model, $attribute) {
return $model->rdPerson == 0;
},
'whenClient' => 'function(attribute,value){ return ($("input[name=\''.\yii\helpers\Html::getInputName($this, 'rdPerson[]').'\']:checked").val()==0)}'],
[['otherPerson'], 'required', 'when' => function($model, $attribute) {
return $model->rdPerson == 1;
}, 'whenClient' => 'function(attribute,value){ return ($("input[name=\''.\yii\helpers\Html::getInputName($this,'rdPerson[]').'\']:checked").val()==1)}'],
希望这对您有所帮助。
我的表单中有两个单选按钮和两个文本输入:personID
和 otherPerson
。用户应该 select 第一个单选然后填写 personID textInput 或选择第二个单选然后 otherPerson
textInput 将启用并可以填写 otherPerson
。同时只有一个选择,必须填写其中一个。
如何在客户端检查所需的验证?如果启用第一个无线电,则 personID
是必需的,否则 otherPerson
。我已经按照代码尝试了,但它不起作用。
['personID', 'required', 'when' => function ($model) {
return $model->rdPerson== 0;
}, 'whenClient' => "function (attribute, value) {
return $('input[name=rdPerson]').val()==0;
}"]
['otherPerson', 'required', 'when' => function ($model) {
return $model->rdPerson== 1;
}, 'whenClient' => "function (attribute, value) {
return $('input[name=rdPerson]').val()==1;
}"]
如何解决这个问题?
我的表格:
<?= $form->field($model, 'rdPerson')->radio(['name' => 'rdPerson', 'value' => 0]); ?>
<?php echo $form->field($model, 'personID')->textInput(); ?>
<?= $form->field($model, 'rdPerson')->radio(['name' => 'rdPerson', 'value' => 1])?>
<?php echo $form->field($model, 'otherPerson')->textInput(); ?>
您需要对您的表单字段和您在 whenClient
中使用的脚本添加一些更改,不要手动提供输入名称,因为它们是由 ActiveForm
自动生成的,请更改您的字段定义使用分组单选按钮,这意味着不是使用 name='rdPerson'
或 $form->field($model,'rdPerson')
,而是使用数组名称将它们分组,如 $form->field($model,'rdPerson[]')
。因为否则您使用它的方式将始终检索第一个单选按钮,只要您的 whenClient
被字段 personId
或 otherPerson
触发,因此不会工作。
同样在 whenClient
中,您应该检查 :checked
单选按钮的值,而不是直接访问 .val()
,因此 checked
单选按钮的值为检索到。
将表单字段更改为
<?= $form->field($model, 'rdPerson[]')->radio(['value' => 0,'uncheck'=>null]); ?>
<?php echo $form->field($model, 'personID')->textInput(); ?>
<?= $form->field($model, 'rdPerson[]')->radio(['value' => 1,'uncheck'=>null]) ?>
<?php echo $form->field($model, 'otherPerson')->textInput(); ?>
并将您的模型规则更新为以下内容
[['personID'], 'required', 'when' => function($model, $attribute) {
return $model->rdPerson == 0;
},
'whenClient' => 'function(attribute,value){ return ($("input[name=\''.\yii\helpers\Html::getInputName($this, 'rdPerson[]').'\']:checked").val()==0)}'],
[['otherPerson'], 'required', 'when' => function($model, $attribute) {
return $model->rdPerson == 1;
}, 'whenClient' => 'function(attribute,value){ return ($("input[name=\''.\yii\helpers\Html::getInputName($this,'rdPerson[]').'\']:checked").val()==1)}'],
希望这对您有所帮助。