javascript - javascript 确认()取消后在表单提交按钮上运行 AJAX 函数

标签 javascript jquery ajax wordpress forms

我有一个表单,其中 AJAX 函数在表单提交时运行,以确保表单中的数据不会与数据库中的数据冲突。如果发现冲突,AJAX函数会弹出一个confirm()框。如果用户单击“确定”,则提交表单。如果他们单击“取消”,则不会提交表单。

这就是事情出现问题的地方。如果他们单击取消,然后调整表单中的值并再次提交,则下次点击表单提交按钮时 AJAX 函数不会运行。有没有办法让 AJAX 函数在每次点击提交时运行,即使他们之前已经取消了表单提交?

这是 AJAX 函数的 chop 版本:

$('#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 根本不会触发。

就其值(value)而言,当您点击 WordPress 自定义帖子类型上的“发布”按钮时,此 AJAX 函数就会运行。

最佳答案

不要使用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;
    });

});

关于javascript - javascript 确认()取消后在表单提交按钮上运行 AJAX 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30993223/

相关文章:

javascript - 将数组映射到数组的对象内

javascript - 从链接中添加/删除 div 类 - jQuery

javascript - 如何使用 JavaScript 在 mongodb 文档的子文档中增加一个值

javascript - Rails Assets 目录未指向布局中指定的目录

javascript - 使用 javascript 函数在客户端允许ColumnResize

javascript - 单击 kendo ui 网格标题中的自定义按钮时如何停止传播

jquery - 使用 jQuery ajax 调用来填充动态对象

ajax - jQuery-Ajax JSON 字符集冲突

javascript - 通过 Ajax 使用 REST 服务 - 同源策略

javascript - 如何刷新或重绘表格行