我遇到了我不太了解的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秒标记后不断更新。

如果有人在这里看到我在做什么错,将非常感谢您的指导。

最佳答案

我遇到了类似的问题。我发现以下代码并未停止监视:

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

关于javascript - JavaScript-clearWatch()不会在setTimeout()上触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37958309/

10-09 22:31