我有模型中所需的某些字段,它们是表单上的下拉列表。
如果我尝试提交表单而不选择任何内容,则视图上的文本输入方式不会出现验证错误。
模型
onMessage
显示空红色验证
[['name', 'survey_type','country_id'], 'required',
'isEmpty' => function ($value) {
return empty($value);
}
],
不显示任何验证
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
答案 0 :(得分:1)
这是因为您覆盖了id
下拉列表:
'id' => 'Survey_Type_dropdown'
如果您希望客户端验证适用于此字段,则不应该这样做。
自动生成ID,然后在与ActiveForm
相关的javascript中使用。
删除它,一切都应该没问题:
<?= $form->field($model, 'survey_type')->dropDownList([$surveyTypeList],['prompt' => 'Select Survey Type']) ?>
如果您想在javascript中对此元素执行某些操作,请使用自动生成的ID或指定自定义类。
答案 1 :(得分:0)
我认为这是因为当值为空时返回empty($value)
的结果,因此该属性设置为true或false,表示它不为空。
尝试删除isEmpty部分。
答案 2 :(得分:0)
然而,接受的答案有效,这不是正确的答案。您可能需要更改任何给定输入字段的ID,并告诉人们不要这样做,因为他们不会重新进行客户端验证是不正确的。
根据Yii2 API文档,它声明如果更改输入字段的ID,您还必须更新输入属性“selector”以匹配您在输入字段的“options”属性中指定的新ID
您可以按照以下方式执行此操作:
<?= $form->field($model, 'survey_type', ['selectors' => ['input' => '#Survey_Type_dropdown']]))->dropDownList([$surveyTypeList],['prompt'=>'Select Survey Type','id'=>'Survey_Type_dropdown']) ?>
如上所述创建输入将允许您在保留客户端验证的同时更改输入字段的ID。