按钮加载和控件属性在表单提交时没有改变



所以我有一个表单,我验证之前提交使用jquery-form-validator插件!但是这里的问题是在success上写的几行代码在一步一步执行的时候没有执行。但是,如果在console中执行或在debugger 中执行,它们可以正常工作。真是一种怪异的行为!!有什么解决办法吗?

JS

$.validate({
    form:'#contact-form',
    onError: function () {
        toastr.error("Please correct the below errors!", "Error");
        return false;
    },
    onSuccess: function () {
        $("#btnContactUs").button('loading'); //Not getting called
        $('.form-contact form').find('input,textarea').attr('readonly', true).addClass('disabled'); //Not getting called
        var formdata = new FormData($('.form-contact form').get(0));
        $.ajax({
            url: $("#contact-form").attr('action'),
            type: 'POST',
            data: formdata,
            processData: false,
            contentType: false,
            success:function(data)
            {
                if(data.result)
                {
                    toastr.success(data.message, "Success");
                    $('.form-contact form').get(0).reset();//Check this
                }
                else
                {
                    toastr.error(data.message, "Error");
                }
            },
            error:function(data)
            {
                toastr.error(data.message, "Error");
            }
        });
        $("#btnContactUs").button('reset');
        $('.form-contact form').find('input,textarea').attr('readonly', false).removeClass('disabled');
        return false; // Will stop the submission of the form
    }
});

在验证成功时,它通过ajax调用Controller方法,但不执行前两行。

UPDATE: Button #btnContactUs是一个bootstrap按钮,具有.button功能,显示加载文本。

你的onSuccess()方法的返回false在你的ajax内部成功回调可以运行之前执行。当您放置调试器时,ajax成功回调事件发生,您的代码运行良好。

我们可以通过jquery的 $.when .then 功能来解决这个问题,如下所示:
$.when(
            $.ajax({
                url: $("#contact-form").attr('action'),
                type: 'POST',
                data: formdata,
                processData: false,
                contentType: false,
                success:function(data)
                {
                    if(data.result)
                    {
                        toastr.success(data.message, "Success");
                        $('.form-contact form').get(0).reset();//Check this
                    }
                    else
                    {
                        toastr.error(data.message, "Error");
                    }
                },
                error:function(data)
                {
                    toastr.error(data.message, "Error");
                }
            })
        ).then(function(){
            $("#btnContactUs").button('reset');
            $('.form-contact form').find('input,textarea').attr('readonly', false).removeClass('disabled');
        });

这通常发生在您试图访问的控件不可用或您在前一个进程完成之前启动一个进程时。为了在这些情况下运行AJAX,尝试在未执行的行上方添加以下setTimeout或SetInterval。

的语法:SetTimeout: http://www.w3schools.com/jsref/met_win_settimeout.aspSetInterval: http://www.w3schools.com/jsref/met_win_setinterval.asp

希望这有帮助!!

相关内容

  • 没有找到相关文章

最新更新