从Click单击终止Javascript循环

时间:2013-02-13 05:04:04

标签: javascript

我有一个javascript脚本我正在为一个获取设备位置的phonegap应用程序开发,直到获得某个目标精度。如果不满足目标,脚本会再次将自己称为永恒。通常需要1-8次尝试,具体取决于位置和最后一次使用,然后一切正常。我遇到的问题是有些设备从未达到该阈值(对于应用程序来说很好),但由于此脚本在后台运行,因此会损坏电池寿命。那么如何通过单击事件(提交按钮)来终止此脚本?我正在考虑设置一个响应提交按钮更改的全局变量。类似的东西:

if (var != 'quit') {
    //function 
} else {
    ///nothing
}

function getlocation(position) {
    document.getElementById("lat").value = (position.coords.latitude);
    document.getElementById("long").value = (position.coords.longitude);
    document.getElementById("accu").value = (position.coords.accuracy);
    var accuracy = parseInt(position.coords.accuracy, 10);
    if (accuracy <= 50) {
        $('#scanner').removeClass('littlered').addClass('littlegreen');
    } else {
        setTimeout(navigator.geolocation.getCurrentPosition(getDroplocation, onError, {
            enableHighAccuracy: true
        }), 3000);
    }
}

但这并没有起作用。我设置了全局变量但没有任何反应。是否有更好的方法或方法来实现上述想法?我是在正确的轨道上吗?

2 个答案:

答案 0 :(得分:0)

您需要clearTimeout

更改

function getlocation(position) {

var tId;
function getlocation(position) {

setTimeouttId=setTimeout

并执行clearTimeout(tId);点击任意想要点击或添加计数器并在10次尝试后杀死

例如

<input type="button" id="togglebutton" value="Stop" />
使用

var tId,startPosition="whateverdefaultpositionissetto";
window.onload=function() {
  document.getElementById("togglebutton").onclick = function() {
    if (tId) {
      clearTimeout(tId);
      this.value="Start";
    }
    else {
      getlocation(startPosition); 
      this.value="Stop";
    }
  }
}

答案 1 :(得分:0)

使用clearTimeout()方法清除使用setTimeout()方法设置的计时器。

var to;

function getlocation(position) {
    document.getElementById("lat").value = (position.coords.latitude);
    document.getElementById("long").value = (position.coords.longitude);
    document.getElementById("accu").value = (position.coords.accuracy);
    var accuracy = parseInt(position.coords.accuracy, 10);
    if (accuracy <= 50) {
        $('#scanner').removeClass('littlered').addClass('littlegreen');
    } else {
        to = setTimeout(navigator.geolocation.getCurrentPosition(getDroplocation, onError, {
            enableHighAccuracy: true
        }), 3000);
    }
}

//Add click event handler to a button to stop the looping
var button = document.getElementById("testbtn");
testbtn.onclick = function() {
    clearTimeout(to);
}