我有一个表单,其中AJAX函数在表单提交时运行,以确保表单中的数据不会与数据库中的数据冲突。如果发现冲突,AJAX函数会弹出confirm()框。如果用户点击"确定",则提交表单。如果他们点击"取消",则表单未提交。
这里出现问题。如果他们单击取消然后调整表单中的值并再次提交,则AJAX函数在下次单击表单提交按钮时不会运行。有没有办法让AJAX函数在每次命中提交时运行,即使他们之前已经取消了表单提交?
这是AJAX函数的截断版本:
$('#publish').one('click', function (e) {
e.preventDefault();
var url = shiftajax.ajaxurl;
var shift = $('#post_ID').val();
var data = {
'action': 'wpaesm_check_for_schedule_conflicts_before_publish',
'shift': shift,
};
$.post(url, data, function (response) {
if( response.action == 'go' ) {
// submit the form
$('#post').submit();
} else {
// ask user for confirmation
if (confirm(response.message)) {
// user clicked OK - submit the form
$('#post').submit();
} else {
// user clicked cancel - do nothing
}
}
});
});
就像我说的,这工作得很好,但是如果你在点击"取消"之后点击提交按钮,则AJAX根本不会触发。按钮。
对于它的价值,这个AJAX函数在你点击"发布" WordPress自定义帖子类型上的按钮。
答案 0 :(得分:1)
不要使用one
(它只会触发ajax提交或按钮点击一次),请在此处使用var IsBusy
检查用户是否反复按表单提交,
尝试以下代码,
var isBusy = false; //first time, busy state is false
$('#publish').on('click', function (e) {
if(isBusy == true)
return ; //if Busy just return dont submit
else
isBusy= true; //true , tell that ajax is now busy processing a request
e.preventDefault();
var url = shiftajax.ajaxurl;
var shift = $('#post_ID').val();
var data = {
'action': 'wpaesm_check_for_schedule_conflicts_before_publish',
'shift': shift,
};
$.post(url, data, function (response) {
if( response.action == 'go' ) {
// submit the form
$('#post').submit();
} else {
// ask user for confirmation
if (confirm(response.message)) {
// user clicked OK - submit the form
$('#post').submit();
} else {
// user clicked cancel - do nothing
}
}
isBusy = false;
});
});