Yii2 使用 javascript 验证 ActiveForm
Yii2 validate an ActiveForm with javascript
我有一个可用的活动表单,可以通过 Yii 提交和验证 PHP。但是,我想在单击 Next
按钮时确定表单是否有效。
我可以通过这个向用户传递错误信息:
$("#form").yiiActiveForm("validate", true);
但是这个函数没有return任何东西;我不知道是否确实有任何错误。我试过这个:
$error_count = document.getElementsByClassName("help-block").length
但这行不通;在 UI 更新之前计算错误。如果我再次按下按钮,第二次,那么 error_count
就是我所期望的。
这似乎没有做任何事情:
$("#form").yiiActiveForm("validate");
我也试过这个:
$('#form').on('afterValidate', function (event, messages, errorAttributes) {}
但这只是事后触发,所以我不确定该怎么做。
如有任何建议,我们将不胜感激。
如果您需要对按钮做出反应,您只需将这两个事件结合起来:
let isNextClicked = false;
$('.next-btn').on('click', function(e) {
e.preventDefault();
isNextClicked = true;
$("#form").yiiActiveForm("validate", true);
});
$('#form').on('afterValidate', function(event, messages, errorAttributes) {
if (!isNextClicked) {
//validation wasn't triggered by clicking next
return;
}
// reset the state
isNextClicked = false;
if (errorAttributes.length > 0) {
//there are errors so we won't let user to continue
//we can also show some alert() here
return;
}
// ... code to show the next tab of form ...
});
我有一个可用的活动表单,可以通过 Yii 提交和验证 PHP。但是,我想在单击 Next
按钮时确定表单是否有效。
我可以通过这个向用户传递错误信息:
$("#form").yiiActiveForm("validate", true);
但是这个函数没有return任何东西;我不知道是否确实有任何错误。我试过这个:
$error_count = document.getElementsByClassName("help-block").length
但这行不通;在 UI 更新之前计算错误。如果我再次按下按钮,第二次,那么 error_count
就是我所期望的。
这似乎没有做任何事情:
$("#form").yiiActiveForm("validate");
我也试过这个:
$('#form').on('afterValidate', function (event, messages, errorAttributes) {}
但这只是事后触发,所以我不确定该怎么做。
如有任何建议,我们将不胜感激。
如果您需要对按钮做出反应,您只需将这两个事件结合起来:
let isNextClicked = false;
$('.next-btn').on('click', function(e) {
e.preventDefault();
isNextClicked = true;
$("#form").yiiActiveForm("validate", true);
});
$('#form').on('afterValidate', function(event, messages, errorAttributes) {
if (!isNextClicked) {
//validation wasn't triggered by clicking next
return;
}
// reset the state
isNextClicked = false;
if (errorAttributes.length > 0) {
//there are errors so we won't let user to continue
//we can also show some alert() here
return;
}
// ... code to show the next tab of form ...
});