在javascript confirm()取消后,在表单提交按钮上运行AJAX函数

时间:2015-06-23 03:13:56

标签: javascript jquery ajax wordpress forms

我有一个表单,其中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自定义帖子类型上的按钮。

1 个答案:

答案 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;
    });

});