Yii2表单条件验证异常:支付方式切换后姓氏字段始终必填
Yii2条件必填验证问题解决
你的问题出在客户端验证的选择器不匹配,同时建议规范表单字段的生成方式来避免类似错误,具体修正如下:
1. 修正客户端验证的选择器
你在whenClient回调中使用了$('#paymentOptionId'),但实际下拉框的ID是singleregisterform-paymentoptionid(由模型名+属性名组成),选择器不匹配导致客户端验证逻辑失效,无论选择哪种支付方式都会触发必填校验。
修正后的模型规则代码:
['paymentOptionId', 'required'], ['paymentPersonTitleId', 'required'], ['paymentPersonLastname', 'string', 'min' => 2, 'max' => 45], ['paymentPersonLastname', 'required', 'when' => function ($model) { return $model->paymentOptionId == 2; }, 'whenClient' => "function (attribute, value) { return $('#singleregisterform-paymentoptionid').val() == 2; }"],
2. 推荐使用ActiveForm生成表单字段
手动编写HTML容易出现ID、name属性不匹配的问题,建议使用Yii2的ActiveForm组件自动生成字段,确保属性同步:
生成支付选项下拉框
<?= $form->field($model, 'paymentOptionId')->dropDownList([ 1 => 'Pay Now(立即支付)', 2 => 'Pay Later(稍后支付)', ]) ?>
生成付款人姓氏输入框
<?= $form->field($model, 'paymentPersonLastname')->textInput([ 'maxlength' => 40, 'placeholder' => 'Enter last name' ]) ?>
3. 检查模型属性声明
确保SingleRegisterForm模型中正确声明了相关属性,否则服务器端无法正确接收和判断值:
class SingleRegisterForm extends \yii\base\Model { public $paymentOptionId; public $paymentPersonLastname; // 其他需要的属性... // 规则方法... }
内容的提问来源于stack exchange,提问作者Quentinb
相关产品推荐
相关产品推荐

