单击时超时终止所有正在运行的JavaScript函数

单击时超时终止所有正在运行的JavaScript函数,javascript,function,Javascript,Function,我有一个带有3个按钮和“结果”部分的网页: 1st按钮 第二个按钮 第三个按钮 “下面是结果!” 以下是JavaScript函数的代码段: var-to; 函数f1(){ //终止所有函数的其他运行实例 to=设置超时(()=>{ document.getElementById(“结果”).innerHTML=“第一个函数”; },10000*Math.random()); } f2和f3基本相同,但在不到10秒的暂停后打印不同的输出 但是,如果用户单击b1,然后立即单击b2,则f1中的in

我有一个带有3个按钮和“结果”部分的网页:

1st按钮
第二个按钮
第三个按钮

“下面是结果!”

以下是JavaScript函数的代码段:

var-to;
函数f1(){
//终止所有函数的其他运行实例
to=设置超时(()=>{
document.getElementById(“结果”).innerHTML=“第一个函数”;
},10000*Math.random());
}
f2
f3
基本相同,但在不到10秒的暂停后打印不同的输出

但是,如果用户单击
b1
,然后立即单击
b2
,则
f1
中的
innerHTML
有可能在
f2
中的之后运行,输出将是
1st function
,而不是
2nd function


我想要的是在每个函数开始时实现一个语句,该语句终止/忽略/绕过当前正在运行的所有函数,以便最终输出始终与用户按下的最后一个按钮关联。如何才能最好地实现它?

如果函数以前被按下过一次,请使用布尔值停止该函数的运行

var pause=false;
var result=document.getElementById(“结果”);
函数genericF(文本){
如果(暂停)返回;
暂停=正确;
//终止所有函数的其他运行实例
设置超时(()=>{
result.innerHTML=文本;
暂停=错误;
},10000*Math.random());
}
1st按钮
第二个按钮
第三个按钮

“这里将显示结果!”

如果函数之前被按下过一次,请使用布尔值停止该函数的运行

var pause=false;
var result=document.getElementById(“结果”);
函数genericF(文本){
如果(暂停)返回;
暂停=正确;
//终止所有函数的其他运行实例
设置超时(()=>{
result.innerHTML=文本;
暂停=错误;
},10000*Math.random());
}
1st按钮
第二个按钮
第三个按钮

“结果在这里!”

您可以设置一个所有函数都可以看到的全局变量,并使用它存储
setTimeout()的返回值。你已经在这样做了。现在需要做的就是在每个函数的头部调用
clearTimeout()
,以防止执行上一个调用

其效果是,最后按下的按钮将是唯一获胜的按钮

var-to;
函数f1(){
清除超时(到)
//终止所有函数的其他运行实例
to=设置超时(()=>{
document.getElementById(“结果”).innerHTML=“第一个函数”;
},3000*Math.random());
}
函数f2(){
清除超时(到)
//终止所有函数的其他运行实例
to=设置超时(()=>{
document.getElementById(“结果”).innerHTML=“第二个函数”;
},3000*Math.random());
}
函数f3(){
清除超时(到)
//终止所有函数的其他运行实例
to=设置超时(()=>{
document.getElementById(“结果”).innerHTML=“第三个函数”;
},3000*Math.random());
}
1st按钮
第二个按钮
第三个按钮

“结果在这里!”

您可以设置一个所有函数都可以看到的全局变量,并使用它存储
setTimeout()的返回值。你已经在这样做了。现在需要做的就是在每个函数的头部调用
clearTimeout()
,以防止执行上一个调用

其效果是,最后按下的按钮将是唯一获胜的按钮

var-to;
函数f1(){
清除超时(到)
//终止所有函数的其他运行实例
to=设置超时(()=>{
document.getElementById(“结果”).innerHTML=“第一个函数”;
},3000*Math.random());
}
函数f2(){
清除超时(到)
//终止所有函数的其他运行实例
to=设置超时(()=>{
document.getElementById(“结果”).innerHTML=“第二个函数”;
},3000*Math.random());
}
函数f3(){
清除超时(到)
//终止所有函数的其他运行实例
to=设置超时(()=>{
document.getElementById(“结果”).innerHTML=“第三个函数”;
},3000*Math.random());
}
1st按钮
第二个按钮
第三个按钮

“结果在这里!”

最终输出将始终是按下的第一个按钮,而不是最后一个。我相信这会阻止进一步的输入,直到第一个功能完成。我希望看到的是第一个功能的提前终止和第二个功能的立即启动。最终输出将始终是按下的第一个按钮,而不是最后一个。我相信这将阻止进一步的输入,直到第一个功能完成。我想看到的是第一个功能的提前终止和第二个功能的立即启动。工作优雅!工作优雅!