Javascript 使用setTimeout禁用JS操作按钮

Javascript 使用setTimeout禁用JS操作按钮,javascript,jquery,r,shiny,Javascript,Jquery,R,Shiny,我有一个闪亮的应用程序,我需要在点击一个按钮后禁用操作按钮来停止用户的垃圾邮件按钮,我编写了一些JS脚本来在服务器繁忙(“闪亮:忙碌”)时执行此操作,并在服务器为idol(“闪亮:空闲”)时解锁。像这样: $(document).on("shiny:busy", function() { var inputs = document.getElementsByTagName("Button"); console.log(inputs); for (v

我有一个闪亮的应用程序,我需要在点击一个按钮后禁用操作按钮来停止用户的垃圾邮件按钮,我编写了一些JS脚本来在服务器繁忙(“闪亮:忙碌”)时执行此操作,并在服务器为idol(“闪亮:空闲”)时解锁。像这样:

$(document).on("shiny:busy", function() {
  var inputs = document.getElementsByTagName("Button");
  console.log(inputs);
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = true;
}
});

$(document).on("shiny:idle", function() {
  var inputs = document.getElementsByTagName("Button");
  console.log(inputs);
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = false;
}
});
$(document).on(“闪亮:忙碌”,函数(){
var inputs=document.getElementsByTagName(“按钮”);
控制台日志(输入);
对于(变量i=0;i
不幸的是,因为我有反应元素,所以当服务器在短时间内忙碌时,我的按钮现在会闪烁。我修改了代码,利用setTimeout函数仅在1000毫秒后锁定按钮,但似乎无法使其工作。有人能帮我吗

以下是新代码:

function setBusy()
{
          if(!isBusy)
             return;

var inputs = document.getElementsByTagName("Button");
  
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = true;
}
}

let isBusy = false;
$(document).on("shiny:busy", function() {
   isBusy = true;
   setTimeout(setBusy, 1000); // after one thousand milliseconds run the function above
});

$(document).on("shiny:idle", function() {
           isBusy = false; // if the setBusy fires after this, it'll see this and not set things to disabled
  var inputs = document.getElementsByTagName("Button");
 
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = false;
}
});  
函数setBusy()
{
如果(!正忙)
返回;
var inputs=document.getElementsByTagName(“按钮”);
对于(变量i=0;i
也在控制台中获取此消息:[违规]“setTimeout”处理程序将尝试将
isBusy
作为
setBusy
函数的参数。因为在1000毫秒后,可能会触发
shinny:idle
,然后
setBusy
false
。谢谢@Stéphanelant,所以代码正在工作,它在长时间的shinny:busy期间正确禁用按钮,但会立即发生,而不是在指定的1000毫秒之后。我想知道我是否写了setTimeout,但它不能正常工作?应该如何触发禁用?点击某个按钮后?如果是这种情况,我会将禁用代码放在这些按钮的单击例程中(理想情况下甚至是在闪亮的一面)。一旦例程完成,您可以再次启用它们。同时在控制台中获得此消息:[违例]“setTimeout”处理程序将尝试将
isBusy
作为
setBusy
函数的参数。因为在1000毫秒后,可能会触发
shinny:idle
,然后
setBusy
false
。谢谢@Stéphanelant,所以代码正在工作,它在长时间的shinny:busy期间正确禁用按钮,但会立即发生,而不是在指定的1000毫秒之后。我想知道我是否写了setTimeout,但它不能正常工作?应该如何触发禁用?点击某个按钮后?如果是这种情况,我会将禁用代码放在这些按钮的单击例程中(理想情况下甚至是在闪亮的一面)。完成例程后,可以再次启用它们。