我遇到了JavaScript的watchPosition和clearWatch函数的一些问题,我不太明白,如果有人可以提供帮助,我会很感激。
首先,有问题的功能......
function location(x){
var getLocation;
var lat_input = $(x).find(".latitude");
var lon_input = $(x).find(".longitude");
var acc_input = $(x).find(".accuracy");
function showPosition(position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
accuracy = position.coords.accuracy;
$(lat_input).val(latitude);
$(lon_input).val(longitude);
$(acc_input).val(accuracy);
setTimeout(function(){
navigator.geolocation.clearWatch(getLocation);
alert('done');
}, 10000);
};
getLocation = navigator.geolocation.watchPosition(showPosition, null, {maximumAge: 0, timeout: Infinity, enableHighAccuracy: true});
};
特别是,我的问题在于setTimeout部分中的代码。
当我在笔记本电脑上运行此功能时,一切都开始正常 - 相应地填充.longitude,.latitude和.accuracy字段。 10秒后,触发了setTimeout - 我不能说clearWatch是否成功运行(因为计算机的查找能力非常有限),但我在这里注意到的奇怪行为是alert('done')
被触发两次
当我在我的手机(目标平台)上运行此功能时,一切都会开始,但是在10秒后,alert('done')
开始无休止地触发,有时会立即连续触发,有时会持续几秒钟之间。然而,最令人痛苦的是,clearWatch似乎根本没有运行 - 纬度,长度和精度字段在10秒标记后不断更新。
如果有人能在这里看到我做错了什么,我们将非常感谢您的指导。
答案 0 :(得分:2)
我遇到了类似的问题。我发现以下代码没有停止观看:
navigator.geolocation.clearWatch(locationID);
第1步:创建变量并将其分配给navigator.geolocation
var geoLoc = navigator.geolocation;
var geoWatchID = geoLoc.watchPosition(
onGPSSuccess, onGPSError,
{ maximumAge: 300, timeout: 1500, enableHighAccuracy: true });
第2步:停止观看使用 var geoloc 而非 navigator.geolocation.clearWatch()
geoLoc.clearWatch(geoWatchID);
geoWatchID = null;
请参阅http://www.tutorialspoint.com/html5/geolocation_clearwatch.htm
答案 1 :(得分:0)
在不知道库重新创建代码的情况下,我无法复制该问题,所以我只能尝试一些东西。
将timer
变量添加到外部范围。
clearTimeout(timer);
timer = setTimeout(function(){
navigator.geolocation.clearWatch(getLocation);
alert('done');
}, 10000);