Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery只允许在.ajax()之前单击一次_Javascript_Jquery_Ajax_Bind_Unbind - Fatal编程技术网

Javascript jQuery只允许在.ajax()之前单击一次

Javascript jQuery只允许在.ajax()之前单击一次,javascript,jquery,ajax,bind,unbind,Javascript,Jquery,Ajax,Bind,Unbind,我试图允许只单击一次按钮,然后通过ajax提交一些数据。我面临的问题是,用户可以点击50次,每次都会提交数据 jQuery("#id").unbind('click'); jQuery.ajax({ type: "POST", url: ajax_url, data: ajax_data, cache: false, success: function (html) { location.reload(true); } });

我试图允许只单击一次按钮,然后通过ajax提交一些数据。我面临的问题是,用户可以点击50次,每次都会提交数据

jQuery("#id").unbind('click');

jQuery.ajax({
    type: "POST",
    url: ajax_url,
    data: ajax_data,
    cache: false,
    success: function (html) {
        location.reload(true);
    }
});
如果用户单击
#ID
100x,我如何确保数据只提交一次?然后重新启用#ID?

您可以在jQuery中使用该函数

jQuery("#id").one('click', function()
{
    jQuery.ajax({
        type: "POST",
        url: ajax_url,
        data: ajax_data,
        cache: false,
        success: function (html) {
            location.reload(true);
        }
    });
});

请记住,这将完全删除单击事件,即使您的ajax出现错误,您仍然无法再次单击它。

最简单的方法是使用一个在触发成功时重置的标志:

if(clicked == False){
    clicked = True;
    jQuery("#id").unbind('click');

    jQuery.ajax({
       type: "POST",
       url: ajax_url,
       data: ajax_data,
       cache: false,
       success: function (html) {
           location.reload(true);
           clicked = False;
       },
       error: function () {
            alert("Error happened");
           clicked = False;
       }
    });
}

您可以禁用以控制,或使用许多模式库中的一个来显示旋转的轮子


查看此图

您可以禁用单击按钮事件,并在ajax请求完成时重新启用它。

在单击事件中,您可以禁用按钮,然后在ajax事件的成功功能中重新启用按钮

另一个选项是在被单击的元素上设置一个参数,以指示按钮已被单击,然后检查是否已设置,如果已设置,则不发送ajax请求,如果未设置,则发送。ajax完成后,您可以再次取消设置参数以允许其运行。

尝试以下操作:

$(document).ajaxStart({ function() {
 $('#submit_button').click(function(){
   return false;
 });
});
其中:#提交按钮是要禁用的元素的id


该代码将禁用单击提交按钮

只需禁用按钮即可

$("#id").attr("disabled", "disabled")
然后在成功函数中启用它

$("#id").removeAttr("disabled")

谢谢你的回复:)?那么我可以在这之后使用解除绑定吗?不,您不需要使用
unbind
功能,它会为您执行此操作。正如Supertramp所说,如果AJAX请求中出现错误,最好
绑定
单击事件。感谢您的响应,但这似乎禁止在用户单击时提交AJAX?i、 e.单击div后,它不会执行任何操作?您可能还需要添加一个回调,以确保异步请求得到处理,事件等待响应。感谢@sruly-但我使用div作为按钮:),因此不能使用attr等-但是+1ok将其更改为按钮:)更容易一些,尽管.One()也是正确的——它演奏得不太好:)这也适用于女主角。如果您使用的是按钮,则可以使用上面的按钮。就我而言,我使用的是td。这对我有用+1您也应该从服务器端进行验证!