2013-02-13 2 views
0

У меня есть сценарий javascript, который я разрабатываю для приложения phonegap, которое получает местоположение устройства, пока не будет достигнута определенная целевая точность. Если цель не выполняется, сценарий снова называет себя вечностью. Обычно это занимает от 1 до 8 попыток в зависимости от местоположения и последнего используемого времени, а затем все работает нормально. Проблема, с которой я сталкиваюсь, заключается в том, что некоторые устройства никогда не достигают этого порога (что отлично подходит для приложения), но разрушает время работы от батареи, потому что этот сценарий работает в фоновом режиме. Итак, как я могу убить этот скрипт с помощью события click (кнопка отправки)? Я думал о настройке глобального var, который нажимал на кнопку отправки кнопки. Что-то вроде:Завершить Javascript Loop From Click

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); 
    } 
} 

Это еще не работает. Я устанавливаю глобальный var, но ничего не происходит. Какие-нибудь лучшие методы или способы получить мою вышеупомянутую идею? Я на правильном пути?

ответ

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); 
} 
+0

Как мне добавить его обратно? Мне нужно, чтобы этот скрипт снова можно было использовать через несколько минут. – centree

+0

вызовите функцию, которая снова выполнит метод setTimeout() – frosdqy

+0

и установит значение = в это? – centree

0

Вы хотите clearTimeout

Изменить

function getlocation(position) { 

Для

var tId; 
function getlocation(position) { 

и setTimeout к tId=setTimeout

И сделать clearTimeout(tId); OnClick того, что вы хотите нажать или добавить COUN тер и убить после 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"; 
    } 
    } 
} 
+0

Как добавить его обратно после? Мне нужно, чтобы этот скрипт снова можно было использовать через несколько минут. Что еще я нажимаю на клик? – centree

+0

Ничего. Жаль, что я не мог легко опубликовать больше кода с моего iPhone, так как принятый ответ идентичен, но позже, чем мой – mplungjan