如何使用jQuery阻止双重提交($ .post)

时间:2013-09-10 16:06:16

标签: jquery click double

$(document).ready(function(){

    $("#enviar").click(function(e){

        e.preventDefault();

        //prevent run 2 or more times if the user clicks the button multiple times to send

        $.post(url,{data:data1,data2:data2},function(rp){

        });

    });

});

如果用户反复点击按钮,则阻止发送2次“发布”,而不禁用提交按钮

2 个答案:

答案 0 :(得分:2)

使用特殊类(例如:submitting)作为标记来指示请求正在进行中:

$("#enviar").click(function(e){
    e.preventDefault();

    var btn = this;
    // check if already present :   
    if ( $(btn).is('.submitting') ){
        return;
    }
    // add it before request :
    $(btn).addClass('submitting');

    $.post(url,{data:data1,data2:data2},function(rp){

    }).always(function(){
        // remove it after completion or failure :
        $(btn).removeClass('submitting');
    });
});

答案 1 :(得分:1)

使用jQuery的.one事件:

$("#enviar").one("click", function() {
  $.post();
});

来自文档:

  

将处理程序附加到元素的事件。处理程序已执行   每个元素最多一次

或者如果你想做一些额外的检查,使用开/关:

// Set up the initial bind on DOM ready
$("#enviar").on("click", doPost);

function doPost() {
  // Unbind when it is clicked
  $("#enviar").off("click", doPost);
  // Do your post
  $.post(url, {}, function() {
    // You could bind again on success if you want
    $("#enviar").on("click", doPost);
  });
}