我希望在按下按钮后延迟按钮,以便在执行下一行代码之前按钮从缓存加载数据。睡觉是最好的方法吗?
这样的事情还是有其他方法可以最好地解决这个问题?
setInterval(document.getElementById("generateButton"), 1000);
答案 0 :(得分:3)
请勿使用setInterval
执行此操作。它没有你想要的功能(它重复)。相反,使用jQuery并执行以下操作:
$("#generateButton").click(function(event){
setTimeout(function(){
//Do what the button normally does
}, 1000);
});
或(没有JQuery):
var generateButton = document.getElementById("generateButton");
generateButton.addEventListener("click", function(){
setTimeout(function(){
//Do what the button normally does
}, 1000);
});
在您的情况下首选setTimeout
,因为setInterval
只运行一次而setTimeout
多次运行。
我假设你的html中有setInterval
。移除<button id='generateButton' onclick='someFunction()'>Button Text</button>
并将onclick='someFunction()
放在我说的位置(在示例中)&#34;执行按钮通常执行的操作。&#34;
您还可以在加载缓存的代码中添加一个方法,该方法在加载缓存后调用另一个方法(当调用按钮的someFunction()
时,它会加载缓存,并在结束时函数(使用回调设置),一旦加载了缓存,它就会调用另一个可以在加载缓存后运行的方法someFunction()
。
答案 1 :(得分:1)
您应该使用回调,因此从缓存加载数据的那一刻您可以调用它并继续执行脚本的其余部分。 您无法使用间隔,因为您无法确定加载数据需要多长时间。虽然请记住javascript的异步特性,并且不要阻止脚本中不依赖于正在加载的数据的部分。
答案 2 :(得分:0)
尝试setTimeout
:
myButton.addEventListener('click', function() {
setTimeout(delayed, 1e3); // Delay code
}, false);
function delayed() {
// Do whatever
}
注意setInterval
定期运行一个函数,setTimeout
只运行一次。
另请注意,延迟代码必须是一个函数(或一个eval
uated的字符串,但最好避免这种情况。但是,document.getElementById("generateButton")
会返回一个html元素(或null
)。