Yii2:使用表单外的按钮提交并验证表单
Yii2: Submit and validate a form by using a button outside the form
我在使用 Yii2 使用表单外的按钮提交和验证表单时遇到问题。
这是我的情况:
我在该表单中有一个表单 (myForm) 和一个提交按钮 (myButton)。当我单击 myButton 时,将执行验证,如果验证失败,则不会执行提交。这当然是预料之中的,而且它有效。
但是,我真正想要的是通过单击表单元素外部的 myButton 来提交 myForm。为了完成这个,我只需调用 jQuery('myForm').submit(),然后提交工作。
我在最后一个场景中遇到的问题是验证失败但表单已提交,这不是预期的。
如何在表单外提交带有按钮的表单,并使验证也有效?
这是我的观点:
<?php
$form = ActiveForm::begin([
'validateOnSubmit' => true,
'type' => ActiveForm::TYPE_VERTICAL,
'options' => ['class' => 'main-task-form']
]);
echo Form::widget([
'model' => $modelData,
'form' => $form,
'columns' => 2,
'attributes' => [
'closeDate' => [
'type'=> 'widget',
'widgetClass'=> DatePicker::className(),
'options'=>[
'type' => DatePicker::TYPE_COMPONENT_APPEND,
'pluginOptions' => [
'autoclose' => true,
'language' => 'es',
'format' => 'dd-mm-yyyy',
'todayBtn' => 'linked',
],
],
],
'descriptionClose' => [
'type'=>'textarea',
'options' => [
'rows' => 3,
],
],
],
]);
?>
<?php ActiveForm::end() ?>
<!-- Form Ends Here -->
<!-- Submit Button Outside Form -->
<?= Html::button('Completar Tarea', ['class' => 'btn btn-primary btn-task-form']) ?>
这是 Javascript 代码,告诉表单外的按钮触发提交:
function assignCompleteButtonToTaskForm ()
{
var completeButton = jQuery ('button.btn-task-form')[0];
var mainTaskForm = jQuery ('form.main-task-form')[0];
completeButton.onclick = function (e) {
mainTaskForm.submit ();
}
}
对此有什么想法吗?
另外,如何在手动执行提交之前直接触发验证过程?也许这会帮助我控制提交过程。
好吧,你可以使用 jQuery。
jQuery(document).ready(function($){
// Set Button ID or class replacing # to .
$("#you_button_id").on('click', function(event){
// When you click on this button don't do any thing.
event.preventDefault();
// Set form ID and submit that form
$("#your_form_id").submit();
});
})
试试看是否有效。
您也可以通过Yii方式手动触发表单的验证,使用以下javascript代码
$('#form-id').yiiActiveForm('submitForm');
这将验证表单,如果没有验证错误,returns true
否则 false
。
因此您可以将其与表单提交调用结合起来以实现所需的行为。
此外,有时深入研究代码并查看内部工作方式是个好主意,您可以在 yii.activeForm.js 中看到 yii 如何在前端处理其大部分活动表单内容,我相信您赢了后悔了
我的代码中碰巧遇到了同样的情况,我结合使用了其他两个答案:
$(document).ready(function() {
var $form = $('#form_id");
$form.on('submit', function(e) {
return $form.yiiActiveForm('submitForm');
});
$('#submit_button_id").on('click', function() {
$form.submit();
});
});
您必须自己调用 submitForm
的原因(如果您想在提交前再次验证)是因为默认的 Yii2 实现绑定了此函数的调用以在表单中提交输入。这意味着它不会被外部触发调用。
我找到了解决我的问题的方法,结合了您以前的一些答案。现在我能够触发表单验证并按最初的预期正确请求确认。 See the final code。感谢您的帮助。
我在使用 Yii2 使用表单外的按钮提交和验证表单时遇到问题。
这是我的情况:
我在该表单中有一个表单 (myForm) 和一个提交按钮 (myButton)。当我单击 myButton 时,将执行验证,如果验证失败,则不会执行提交。这当然是预料之中的,而且它有效。
但是,我真正想要的是通过单击表单元素外部的 myButton 来提交 myForm。为了完成这个,我只需调用 jQuery('myForm').submit(),然后提交工作。
我在最后一个场景中遇到的问题是验证失败但表单已提交,这不是预期的。
如何在表单外提交带有按钮的表单,并使验证也有效?
这是我的观点:
<?php
$form = ActiveForm::begin([
'validateOnSubmit' => true,
'type' => ActiveForm::TYPE_VERTICAL,
'options' => ['class' => 'main-task-form']
]);
echo Form::widget([
'model' => $modelData,
'form' => $form,
'columns' => 2,
'attributes' => [
'closeDate' => [
'type'=> 'widget',
'widgetClass'=> DatePicker::className(),
'options'=>[
'type' => DatePicker::TYPE_COMPONENT_APPEND,
'pluginOptions' => [
'autoclose' => true,
'language' => 'es',
'format' => 'dd-mm-yyyy',
'todayBtn' => 'linked',
],
],
],
'descriptionClose' => [
'type'=>'textarea',
'options' => [
'rows' => 3,
],
],
],
]);
?>
<?php ActiveForm::end() ?>
<!-- Form Ends Here -->
<!-- Submit Button Outside Form -->
<?= Html::button('Completar Tarea', ['class' => 'btn btn-primary btn-task-form']) ?>
这是 Javascript 代码,告诉表单外的按钮触发提交:
function assignCompleteButtonToTaskForm ()
{
var completeButton = jQuery ('button.btn-task-form')[0];
var mainTaskForm = jQuery ('form.main-task-form')[0];
completeButton.onclick = function (e) {
mainTaskForm.submit ();
}
}
对此有什么想法吗?
另外,如何在手动执行提交之前直接触发验证过程?也许这会帮助我控制提交过程。
好吧,你可以使用 jQuery。
jQuery(document).ready(function($){
// Set Button ID or class replacing # to .
$("#you_button_id").on('click', function(event){
// When you click on this button don't do any thing.
event.preventDefault();
// Set form ID and submit that form
$("#your_form_id").submit();
});
})
试试看是否有效。
您也可以通过Yii方式手动触发表单的验证,使用以下javascript代码
$('#form-id').yiiActiveForm('submitForm');
这将验证表单,如果没有验证错误,returns true
否则 false
。
因此您可以将其与表单提交调用结合起来以实现所需的行为。
此外,有时深入研究代码并查看内部工作方式是个好主意,您可以在 yii.activeForm.js 中看到 yii 如何在前端处理其大部分活动表单内容,我相信您赢了后悔了
我的代码中碰巧遇到了同样的情况,我结合使用了其他两个答案:
$(document).ready(function() {
var $form = $('#form_id");
$form.on('submit', function(e) {
return $form.yiiActiveForm('submitForm');
});
$('#submit_button_id").on('click', function() {
$form.submit();
});
});
您必须自己调用 submitForm
的原因(如果您想在提交前再次验证)是因为默认的 Yii2 实现绑定了此函数的调用以在表单中提交输入。这意味着它不会被外部触发调用。
我找到了解决我的问题的方法,结合了您以前的一些答案。现在我能够触发表单验证并按最初的预期正确请求确认。 See the final code。感谢您的帮助。