jQuery点击进行多次AJAX调用



我有多个jQuery脚本在一起工作。一个将单击操作绑定到元素,另一个处理特定的功能。

尽管我试图以不同的方式停止多个呼叫,但我仍然可以通过快速点击来启动两个呼叫。

在成功呼叫重新绑定操作后,每次返回时也可以将呼叫次数增加一倍,但这似乎是最初可以呼叫两次的结果。

有什么建议可以确保takeAction只能被调用一次?

以下是我的代码片段:

动作点击活页夹:

var actions = 
{
    pressed: false,
    bind: function()
    {
        $(".battleAction").off('click').one('click', function(event) {
            if (actions.pressed) return;
            actions.pressed = true;
            $(".battleAction").off('click');
            var idoption = $(this).attr('data-battle-option');
            battle.takeAction({    idoption: idoption   });
        });
    }
}

作战功能:

var battle =
{
    takeAction: function( action )
    {
        battle.a = {
            idoption: null
        };
        $.extend( battle.a, action );
        $.ajax({
            url: "url/to/post",
            type: "post",
            data: { option: battle.a.idoption },
            dataType: "json",
            success: function(data) {
                actions.bind();
            }
        });
    }
}

以及获得点击事件的HTML按钮:

<button type="button" class="btn btn-default battleAction" data-battle-option="1">
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>action 1</button>
<button type="button" class="btn btn-default battleAction" data-battle-option="2">
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>action 2</button>
<button type="button" class="btn btn-default battleAction" data-battle-option="3">
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>action 3</button>

问题似乎是在AJAX调用之后重新分配点击。在这么短的时间内,我可以打两个电话。

您可以在点击后禁用按钮,并在AJAX调用后重新启用:

动作点击活页夹:

$(".battleAction").on('click', function(event) {
  $(this).prop("disabled", true);
  var idoption = $(this).attr('data-battle-option');
  battle.takeAction({    idoption: idoption   });
});

作战功能:

var battle =
{
    takeAction: function( action )
    {
        battle.a = {
            idoption: null
        };
        $.extend( battle.a, action );
        $.ajax({
            url: "url/to/post",
            type: "post",
            data: { option: battle.a.idoption },
            dataType: "json",
            success: function(data) {
                $(".battleAction").prop("disabled", false);
            }
        });
    }
}

似乎您可能想将.off移动到处理程序中的第一件事,这样即使返回true,它也总是"关闭":

$(".battleAction").off('click').one('click', function(event) {
   $(".battleAction").off('click');
   if (actions.pressed) return;
   actions.pressed = true;
   var idoption = $(this).attr('data-battle-option');
   battle.takeAction({
     idoption: idoption
   });
 });

相关内容

  • 没有找到相关文章

最新更新