[英]Contact form 7 add disabled attr to button to prevent double submission
我有一個 WordPress 網站,並且有 Contact form 7 插件,我想將 attr 添加到提交按鈕以禁用雙重提交。 現在我有這個代碼來防止雙重提交
$(document).on('click', '.wpcf7-submit', function(e){
if( $('.ajax-loader').hasClass('is-active') ) {
e.preventDefault();
return false;
}
});
但我想在表單發送或獲取錯誤響應時添加 attr disabled 以獲得更好的用戶體驗
改進馬特的答案 -
$('.wpcf7-form').on('submit', function() {
$(this).find('.wpcf7-submit').attr('disabled', true);
});
單擊它時,這將禁用提交按鈕。 現在要在成功或失敗后再次激活該屬性,您需要在提交完成后刪除該屬性(無論是成功還是失敗)。 由於插件開發人員對事件的工作方式有點異想天開,我正在為 2019 年第一季度編寫此解決方案 -
$('.wpcf7').on('wpcf7submit', function (e) {
$(this).find('.wpcf7-submit').removeAttr('disabled');
});
其中“.wpcf7”是表單的父容器,“.wpcf7-form”是表單本身。 ' wpcf7submit ' 是 DOM 在提交表單后監聽的事件監聽器(不管是有效還是無效)。
這將禁用按鈕並提交表單。 您需要在禁用按鈕后重新調用提交。
jQuery( '.wpcf7-submit' ).click(function() {
jQuery( this ).attr( 'disabled', true );
jQuery( this ).submit();
});
如果提交出現錯誤,這將重新啟用按鈕。
document.addEventListener( 'wpcf7invalid', function() {
jQuery( '.wpcf7-submit' ).attr( 'disabled', false );
}, false );
$(document).on('click', '.wpcf7-submit', function(e){
$(this).prop('disabled',true);
});
我實現了這個腳本來幫助防止多次提交。 與其他人最大的不同是它可以在每個頁面上使用多個 CF7 表單。 基本上,它在提交時禁用表單和提交按鈕(因為也可以使用 Enter-press 提交表單),向提交按鈕添加一個新標簽“請稍候..”,如果有則重新啟用它們輸入錯誤。 此外,不依賴於 jQuery(Vanilla JS)。
(function () {
var elems = document.querySelectorAll('.wpcf7');
if (!elems.length) {
return false;
}
var forms = document.querySelectorAll('.wpcf7-form');
if (!forms.length) {
return false;
}
function _evtFormSubmit() {
this.disabled = true;
var submitBtn = this.querySelector('button[type="submit"]');
submitBtn.disabled = true;
submitBtn.setAttribute('data-default-text', submitBtn.innerText);
submitBtn.innerHTML = '<span>Please wait...</span>';
}
function _evtInvalid(e) {
var thisForm = document.querySelector('#' + e.detail.id + ' form');
thisForm.disabled = false;
var submitBtn = thisForm.querySelector('button[type="submit"]');
setTimeout(function() {
submitBtn.disabled = false;
submitBtn.innerHTML = '<span>' + submitBtn.getAttribute('data-default-text') + '</span>';
}, 600); // give it a bit of time in case it is a fast submit
}
for(var i = forms.length-1; i >= 0; i--) {
forms[i].addEventListener('submit', _evtFormSubmit, false);
}
for(i = elems.length-1; i >= 0; i--) {
elems[i].addEventListener('wpcf7invalid', _evtInvalid, false);
}
})();
注意:如果您有多個提交按鈕(為什么?),這只影響表單中的第一個按鈕。
對於正在這里尋找解決方案的未來人。 無需 Javascript 的簡單 SCSS/CSS 選項。 對我來說是完美的工作。 它對我來說總是可靠的。 (2022)
.wpcf7-form {
&.submitting {
.wpcf7-submit {
pointer-events: none;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.