我经常使用ActiveForms,并且发现它很方便,因为它包括客户端验证脚本yii.js
和yii.activeForm.js
。它通常自行处理模型规则和基本验证。防止Yii 2.0.10中的多次点击和ActiveForm提交
直到Yii的2.0.9:
我们可以使用下面的脚本,以防止多个表单提交由于快速按钮点击:
$('form').submit(function(){
$(this).find('button[type!="button"],input[type="submit"]').attr("disabled",true);
setTimeout(function(){
$('form .has-error').each(function(index, element) {
$(this).parents("form:first").find(":submit").removeAttr("disabled");
});
},1000);
});
但是,
当前的Yii 2.0.10发布带来一些更改并且在脚本之上失败。现在,如果上面的代码执行,它将不会提交表单。
它也已被讨论过here,并被确定为bug。
因为,yii.js
有两个变化:
- 错误#10358:在yii.js AJAX前置修正竞态条件(silverfire)
- ENH#12580:请yii.js遵守严格的和非严格的javascript模式,以允许与外部代码(mikehaertl)
和,级联yii.activeForm.js
有四个变化:
- 错误#106 81:beforeValidate事件调用yii.activeForm.js(silverfire)
- ENH#12376的已还原修正:添加了参数,以验证yii.activeForm.js()方法,以便能够迫使验证(DrDeath72)
- ENH# 12499:当启用了AJAX验证,yii.activeForm.js将运行它有力的表单提交,以显示所有可能的错误(silverfire)
- ENH#12744:新增afterInit事件yii.activeForm.js(werew01f)
它们可以用v2.0.9中的oder js文件替换吗?
将替换js文件导致故障和意外的行为?
有没有更好的解决方案来防止多次提交?
我试图用你的代码,警予v2.0.10,通过registerJs在我的布局文件添加它,唯一的差异我使用'yii \ bootstrap \ ActiveForm'而不是'yii \ widgets \ ActiveForm'可能是它为我工作的原因吗? – Ripper
@Ripper是否正常工作?点击后,你看到按钮禁用?我也使用registerJs。至于'yii \ bootstrap \ ActiveForm'和'yii \ widgets \ ActiveForm',前者是后者的增强版本,所以在技术上应该没有多大区别。 –
是的,我看到它在点击后立即禁用,表单正常提交,就像我之前说过的那样。 – Ripper