javascript - jQuery click 进行多次 AJAX 调用

标签 javascript jquery ajax event-handling jquery-events

我有多个 jQuery 脚本一起工作。一个将点击操作绑定(bind)到元素,另一个处理特定功能。

虽然尝试以不同的方式停止多个调用,但我仍然可以通过快速单击来触发两个调用。

在成功调用重新绑定(bind)操作后,每次返回时调用次数也可能加倍,但这似乎是首先能够调用它两次的结果。

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

这是我的代码片段:

点击 Binder :

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 调用后重新启用它:

点击 Binder :

$(".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);
            }
        });
    }
}

关于javascript - jQuery click 进行多次 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34235117/

相关文章:

javascript - Angular 2 - 加载路由组件,然后返回到上一个组件

jquery - ckeditor getData 和 setData 不适用于 masterPage

javascript - 针对特定窗口宽度禁用 HTML 中的 jQuery 脚本

php - 根据下拉列表选择从数据库填充另一个选择下拉列表

javascript - javascript 中的lastChild(或lastElementChild)未定义

php - 使用 ajax 创建在线实时文本编辑器

javascript - 类型错误 : Cannot create property 'FOO' on string 'BAR'

c# - html iFrame 内的 JQueryUI DatePicker 不会扩展到框架之外

javascript - 在 Laravel Blade 路由中使用 JavaScript 变量

javascript - 无法在javascript中显示以前隐藏的图像