是否可以通过javascript以编程方式调用活动表单验证?我需要在执行一些ajax操作之前调用验证过程。
答案 0 :(得分:8)
猜猜我在这里回复有点晚了,但我只是有同样的问题,烧酒的解决方案对我也不起作用。
所以我看了一下ActiveForm的JS代码,发现它似乎监视变量中每个字段的状态,如果该字段是"未触及"除非提交实际表格,否则不会触发验证。所以我改变了我的呼吁:
var $form = $("#my-form"),
data = $form.data("yiiActiveForm");
$.each(data.attributes, function() {
this.status = 3;
});
$form.yiiActiveForm("validate");
现在似乎按照我的预期正常工作。
答案 1 :(得分:6)
我们可以通过合并@BlueZed和@S Rana的答案来实现这一目标。
你可以写下面的脚本,所以我们可以检查一下如果表单中有任何错误,那么表单将不会提交(即使它也适用于表格(向导),如表格)。
var $form = $("#form"),
data = $form.data("yiiActiveForm");
$.each(data.attributes, function() {
this.status = 3;
});
$form.yiiActiveForm("validate");
if ($("#form").find(".has-error").length) {
return false;
}
答案 2 :(得分:2)
谢谢blue zed, 但在此之前 - 要附加表单字段,你需要做这些事情......
//您的输入
$inputData = $form->field($model,"prductName");
//删除下一行&将双引号转换为单引号
$newInputData= trim(preg_replace('/\s+/', ' ',str_replace('"',"'", $inputData)));
//然后像这样追加
$("#table").append("'.$newInputData.'");
//这对我来说和蓝色的zend解决方案一样,如下所示
$this->registerJs('
$(document).on("click","input[type=text]",function(){
var $form = $("#w0"),
data = $form.data("yiiActiveForm");
$.each(data.attributes, function() {
this.status = 3;
});
$form.yiiActiveForm("validate");
});
');
答案 3 :(得分:1)
是的,有可能,你应该试试这个:
$('#form-id').yiiActiveForm('validate');
答案 4 :(得分:1)
这对我有用
$this->registerJs( "
$('body').on('beforeSubmit', 'form#product-form', function () {
var form = $(this);
// return false if form still have some validation errors
if (form.find('.has-error').length) {
return false;
}
// submit form
$.ajax({
url: form.attr('action'),
type: 'post',
data: form.serialize(),
success: function (response) {
}
});
return false;
}); ");
答案 5 :(得分:0)
提交表单时激活验证。因此,这将起作用:
$form.data('yiiActiveForm').submitting = true;
$form.yiiActiveForm('validate', false);
validate
的第二个参数称为forceValidate
。
答案 6 :(得分:0)
要从javascript手动验证,您应将以下代码放在表单提交事件的末尾。
return $('#your-form-id').yiiActiveForm('validate');
对于新手用户,
$('#your-form-id').submit(function () {
return $('#your-form-id').yiiActiveForm('validate');
});
另请注意,您应在ActiveForm
上指定表单ID,如下所示
<?php $form = ActiveForm::begin(['id' => 'd4d-hub-form']); ?>
答案 7 :(得分:0)
我有同样的问题。在官方文档中没有明确的解决方案,我也不知道为什么Stackoverflow上的任何解决方案对我都不起作用。可能在yii2的不同版本中有不同的方法可以做到这一点。我花了很多时间来寻找解决方案。就我而言,我已经触发了对表单上个人输入的验证:
$('#form-id').data('yiiActiveForm').submitting = false;
$('#form-id').yiiActiveForm('validateAttribute', 'input-id'); //this will triger validation for input with id 'input-id'
$('#form-id').yiiActiveForm('validateAttribute', 'other-input-id'); //this will triger validation for input with id 'other-input-id'
请注意函数yiiActiveForm()的第二个参数它不是选择器,它不是属性的名称,它是属性输入的id !!!
答案 8 :(得分:0)
试试这个
$("#form-id").data('yiiActiveForm').submitting = true;
$("#form-id").yiiActiveForm('validate');
如果任何字段无效,它将显示验证错误。 此外,如果所有字段都经过验证,则它将提交请求