如何在ajax进程完成之前创建延迟?

时间:2015-09-25 12:48:07

标签: javascript jquery ajax

我有一个名为&#34的按钮;插入评论"。当用户点击它时,表单将被提交(使用ajax)并在数据库中插入新的注释。现在我的问题是当用户在此按钮上点击两次(快速)时,评论将被插入两次。

现在我想阻止再次插入,我的意思是我想在ajax进程工作时禁用所有事件......是否可能?

这是我的代码:

 $("#bottunId").click(function(){
        $("#form-"+pure_id).submit(function(e){
           e.preventDefault(e);            
           comment(pure_id);
         });
});

function comment(pure_id){

    $("#textarea-"+pure_id).animate({opacity: 0.5}, 0);
    var frm = $('#form-'+pure_id);

    $.ajax({
        url :  frm.attr('action'),
        type : frm.attr('method'),
        data : frm.serialize(),
        dataType : 'JSON',
        success : function (commenting_system) {

        if(commenting_system.error_msg){
            $(".error_msg").html(commenting_system.error_msg); $(".error").fadeIn(200);
            close_error_msg = setTimeout(function(){ $(".error").fadeOut(100); }, 5000);
            $("#textarea-"+pure_id).animate({opacity: 1}, 0);
        }

        else{
                $("#table-"+pure_id).append('<tr><td>new row</td></tr>');
                $("#textarea-"+pure_id).animate({opacity: 1}, 0);
        }

        } // for success
    }); // for ajax
} // function comment

2 个答案:

答案 0 :(得分:1)

这对你有用。它在表单中设置了一个名为submitted的标志,这将阻止表单再次提交,直到刷新页面。

$("#bottunId").click(function(){

    $("#form-"+pure_id).submit(function(e){

        if ($(this).data('submitted') !== true) {
            // Mark it so that the next submit can be ignored
            $(this).data('submitted', true);

            // submit form
            comment(pure_id);
        }
        e.preventDefault();
    });

});

答案 1 :(得分:-2)

$("#bottunId").attr('disabled', 'disabled');

在ajax成功方法中你可以删除它。

$("#bottunId").removeAttr('disabled');