我經常使用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