试图弄清楚如何做到这一点,我不太确定。我尝试使用setTimeout
每3秒更新一次本地GPS坐标,但它无法正常工作。我对js很新,所以对任何帮助表示赞赏。这是我到目前为止 -
在我的主JS文件中,我有这个......
var lat_in={};
var long_in={};
var alt_in={};
$.getScript("test_points.js", function(){
console.log("TP script go");
});
$("#Initiate").click(function() {
if (coordinate=="GPS")
{
console.log("GPS go");
lat_out = lat_in;
long_out = long_in;
alt_out = alt_in;
console.log(lat_out, long_out, alt_out)
}
)}
我从另一个js文档(test_points.js)调用lat / long / alt,其中setTimeout
是......
setTimeout(function(){
var lat_in=5;
var long_in=5;
var alt_in=-5;
}, 3000);
我有一堆setTimeout
一个接一个,我想要做的是每隔3秒更新一次变量并再次通过if
语句运行它们。
我甚至接近这样做了吗?提前致谢
答案 0 :(得分:2)
您已使用“var”关键字声明这些变量,这使它们成为传递给超时函数的函数的本地变量。请删除var并重试。
编辑: 正如其他人所指出的那样,你应该使用interval而不是timeout,一旦反映出更改,那么只有你应该尝试访问它们。
答案 1 :(得分:1)
JavaScript 有两种计时器,一种提供称为window.setTimeout
的超时(延迟执行一段代码)(因为setTimeout是window
对象的一种方法)和一个在一段时间内运行一段代码的计时器window.setInterval
。
观察两者是如何工作的
setTimeout(function(){
document.getElementById("showcase").innerHTML += "setTimeout fired only once after 3 seconds. <br />"}, 3000);
setInterval(function(){
document.getElementById("showcase").innerHTML += "setInterval fired every after 5 seconds. <br />"}, 5000);
//not part of the solution, just to demonstrate.
setInterval(function(){
document.getElementById("timer").textContent = 1 + parseInt(document.getElementById("timer").textContent);
}, 1000)
#showcase {
padding: 4px;
border: 1px solid grey;
background-color: #f3f3f3;
}
<span id="timer">0</span> seconds <br />
<div id="showcase"></div>
要让计时器多次运行,请使用setInterval。
关于你的案子
setTimeout(function(){
var lat_in=5;
var long_in=5;
var alt_in=-5;
}, 3000);
将setTimeout
替换为setInterval
时,它仍然无效。正如其他人评论的那样,您在函数的scope
内声明了lat_in
等。这意味着该函数内的变量只是在与区间绑定的函数内的accessibele。关键字为var
。它告诉解析器将变量“绑定”到函数的范围。保留var
,您的计时器函数将覆盖在函数外声明的全局变量。下面的样本应该没问题。
setInterval(function(){
lat_in=5;
long_in=5;
alt_in=-5;
}, 3000);
当你第一次声明变量时,它们被声明为空对象。
var lat_in={};
var long_in={};
var alt_in={};
使用{}
与执行lat_in = new Object()
相同。但是在您的函数中,您用整数覆盖它们。也许这不是故意的。检查GPS编码的文档,了解它需要什么输入。
我们在这里:
您也可以使用window.clearTimeout
和window.clearInterval
停止计时器。每个人当然都提到自己的功能。
为此,您需要将计时器存储到变量中:
timer = window.SetInterval(function(){ ... }, 3000); //always in milliseconds.
clearInterval(timer); // this line will now clear the timer.
聪明的人也会说:“我可以让setTimeout
表现得像个间隔。”
window.setTimeout(myTimerFunction, 3000);
function myTimerFunction(){
//do stuff here
window.setTimeout(myTimerFunction, 3000); //call itself again in three seconds.
}
答案 2 :(得分:0)
由于setTime out是异步的,因此在初始化之前不应该像lat_out = lat_in;
那样启动表达式。
此外,您还使用Var声明变量,使其成为local.so remove var。
答案 3 :(得分:0)
只需使用setInterval
函数在持续间隔后调用函数
$("#Initiate").click(function() {
var intervalCall = window.setInterval(myCallback, 3000);
)}
function myCallback(){
if (coordinate=="GPS")
{
console.log("GPS go");
lat_out = lat_in;
long_out = long_in;
alt_out = alt_in;
console.log(lat_out, long_out, alt_out)
}
}
&#13;
有关setInterval
的详情,您可以read here