我想做一个重复的函数,检索所选的select值并将其发送给变量
function choosepr(){
var a = document.getElementById("projects");
var b = a.options[a.selectedIndex].value; // get value from select
projectimg(b);
projectbutton(b);
projectdesc(b);
setTimeout(choosepr(),200); //repeat function after 200ms
}
变量“b”取正确值并且函数正确接收并执行,问题在于setTimeout,因为激活此函数后它不会以200 ms的频率循环,它只会暂停计算机一段时间并停止执行它。
如何修复它并做好循环?
完整HTML:https://pastebin.com/WVXQrFSf 完全JS:https://pastebin.com/AAW6wZCt
答案 0 :(得分:3)
最好不要使用setTimeout
方法,而是使用setInterval
方法。这种方法比setTimeout
方法更准确,因为setTimeout
等待200ms,运行该函数然后设置另一个超时。所以等待时间实际上超过200毫秒(如果你的函数需要很长时间才能执行,那么等待时间会更长)。
虽然有人可能认为setInterval
将每200毫秒执行一次,但重要的是要注意setInterval
也会延迟,因为JavaScript不是多线程语言,这意味着 - 如果脚本的其他部分正在运行 - 间隔必须等待完成。
尝试使用setInterval
调用此方法。
function choosepr(){
var a = document.getElementById("projects");
var b = a.options[a.selectedIndex].value; // get value from select
projectimg(b);
projectbutton(b);
projectdesc(b);
}
setInterval(choosepr, 200);
答案 1 :(得分:1)
您需要从choosepr
中移除括号,因为您不应该调用该函数而应将其传递给setTimeout
setTimeout(choosepr,200);
更好的解决方案是使用setInterval
function choosepr()
{
var a = document.getElementById("projects");
var b = a.options[a.selectedIndex].value;
projectimg(b);
projectbutton(b);
projectdesc(b);
}
setInterval(choosepr , 200);