javascript - 处理 javascript/jquery 中的多线程问题?

标签 javascript jquery

$(".getDetails").click(function() {
    // some stuff like fetching response from server
})

当用户在几分之一秒内多次点击 UI 上的 getDetails 按钮时,jquery 生成两次点击函数调用,我的逻辑失败。 我认为解决这个问题的方法是在第一次点击时禁用按钮(这样就不能多次点击)。一旦我得到回应或就在返回之前 从点击方法我让它启用。有没有更好的解决方案?

如果不是,我如何在用户第一次单击按钮时立即禁用按钮。我认为它需要在调用 click 方法之前或在 html 元素中的某个地方完成?

Java 提供了 synchronized 关键字,所以在方法内部一次只有一个线程进入,我不确定 javascript 中是否存在类似的东西?

最佳答案

假设点击处理程序执行 AJAX 请求,您可以在发出请求之前将按钮设置为禁用,然后在请求完成后再次启用它。试试这个:

$(".getDetails").click(function(){}
    var $btn = $(this).prop('disabled', true);

    $.ajax({
        url: '/foo'
        success: function() {
            console.log('It worked!');
        },
        error: function() {
            console.log('It failed!');
        }, 
        complete: function() {
            $btn.prop('disabled', false);
        }
    });
});

关于javascript - 处理 javascript/jquery 中的多线程问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715145/

相关文章:

javascript - 禁用/启用文本框 onclick 单选按钮

javascript - Bootstrap 模式按钮单击事件未在第一次触发

javascript - WebStorm 中针对参数数量可变的函数的正确 JSDoc 注释?

jQuery 循环遍历 JSON 文件并在继续之前进行解析

javascript - 检测是否启用了 Javascript?

javascript - 如何关闭工厂方法中向 Controller 返回 promise 的事件监听器?

php - 通过 jquery 传递的表单变量潜在问题

javascript - jQuery中防止每个img都受到影响

javascript - 强制嵌入推文为 100% 宽度

javascript - 多点触控 HTML