有以下构造:
$form = ActiveForm::begin([
'id' => 'update-form',
'enableAjaxValidation' => true,
]);
echo $form->field($model, 'name')->textInput();
ActiveForm::end();
<button type="submit" form="update-form">Сохранить</button>
从 HTML 的角度来看,表单元素可以在表单之外,但必须通过 form 属性引用它。单击按钮时,甚至发送了数据,但是ajax验证没有启动,我需要启动它。如果提交在表单内,则验证有效。如何正确地将提交与表单绑定以便 ajax 验证工作?
从 html 的角度来看,您是对的,表单的提交按钮可以在表单之外。但从验证机制的角度来看,这是行不通的,因为事件附加到提交表单的子元素,在这种情况下它不是子元素。
因为你有两个选择。
通过引用将强制验证调用附加到提交按钮。如果验证失败,请禁用表单提交。
将提交按钮放在表单内,使其大小为 1 像素(您不能使用 display:none)。在表单之外,放置一个简单的按钮,单击该按钮将生成一个提交按钮。
使用外部按钮进行 Ajax 验证,我唯一的问题是我没有在 ActiveForm 中注册
'validateOnSubmit' => trueajax 验证只有一个问题——使用外部字段,但这也解决了。事实是,后者在调用时
ActiveForm::end(),会将初始化以js脚本的形式添加到页面正文中。如果在 end 之后添加字段,则不会将其添加到 js 脚本中。像这样解决: