单击时超时终止所有正在运行的JavaScript函数
我有一个带有3个按钮和“结果”部分的网页:单击时超时终止所有正在运行的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
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按钮
第二个按钮
第三个按钮
“结果在这里!”
最终输出将始终是按下的第一个按钮,而不是最后一个。我相信这会阻止进一步的输入,直到第一个功能完成。我希望看到的是第一个功能的提前终止和第二个功能的立即启动。最终输出将始终是按下的第一个按钮,而不是最后一个。我相信这将阻止进一步的输入,直到第一个功能完成。我想看到的是第一个功能的提前终止和第二个功能的立即启动。工作优雅!工作优雅!