Javascript 在API调用期间禁用按钮

Javascript 在API调用期间禁用按钮,javascript,jquery,Javascript,Jquery,我试着,在一个按钮点击时,在我运行一个调用API的函数时禁用这个按钮,当它完成后,我想重新启用这个按钮 我尝试了一些变体,如attr()/removeAttr(),以及下面的$(this)和$(“#miss”),但奇怪的是,当我只有禁用行按钮禁用时,当我禁用后再启用时,例如在按钮下面的代码中,按钮从不禁用。我错过了什么 $('#miss').click(function() { $(this).prop('disabled', true); registerShot('miss');

我试着,在一个按钮点击时,在我运行一个调用API的函数时禁用这个按钮,当它完成后,我想重新启用这个按钮

我尝试了一些变体,如
attr()
/
removeAttr()
,以及下面的
$(this)
$(“#miss”)
,但奇怪的是,当我只有禁用行按钮禁用时,当我禁用后再启用时,例如在按钮下面的代码中,按钮从不禁用。我错过了什么

$('#miss').click(function() {
  $(this).prop('disabled', true);

  registerShot('miss');

  $(this).prop('disabled', false);
});

问题是您的函数被异步调用,因此该按钮被禁用,但在调用registerShot后立即被重新启用

您可以将元素传递给registerShot,然后在函数末尾的中重新启用它:

$('#miss').click(function () {
            $(this).prop('disabled', true);
            registerShot('miss',this);
        });

function registerShot(p1,e) {
  //CodeHere
  (e).prop('disabled', false);
}

如果您的
注册表shot
功能写得没有问题,这将有助于您:

$('#miss').click(function() {
  let missButton = $(this);
  $(missButton).prop('disabled', true);

  registerShot('miss')
    .then(function(res) {
      $(missButton).prop('disabled', false);
    });

});

使
注册表停止
,无论它是什么,返回一个承诺,然后调用
。然后对其进行
,或者
等待
,然后重新启用该按钮。