Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-clearWatch()未在setTimeout()上触发_Javascript - Fatal编程技术网

JavaScript-clearWatch()未在setTimeout()上触发

JavaScript-clearWatch()未在setTimeout()上触发,javascript,Javascript,我在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("

我在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、.lation和.accurity字段。10秒后,setTimeout被触发——我不能说clearWatch是否成功运行(因为计算机发现自己的能力非常有限),但我在这里注意到的奇怪行为是,
alert('done')
被触发两次

当我在手机(预期的平台)上运行此功能时,一切都会有一个类似的良好开端,但10秒钟后,
alert('done')
开始无休止地触发,有时是立即连续触发,有时是在几秒钟之间触发。然而,最令人痛心的是clearWatch似乎根本没有运行——在10秒标记后,lat、long和精度字段不断更新


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

在不知道重新创建代码的库的情况下,我无法复制此问题,因此我只能提供一些尝试

计时器
变量添加到外部作用域

clearTimeout(timer);
timer = setTimeout(function(){
        navigator.geolocation.clearWatch(getLocation);
        alert('done');
    }, 10000);

我遇到了类似的问题。我发现以下代码没有停止手表:

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()


请参见

尝试将showPosition移到外部位置功能您正在多次启动setTimeout-每次调用该功能时,即使手表在前10秒后被清除,它也会发出警报。如果您以前没有调用setTimeout,那么可能只调用它?
geoLoc.clearWatch(geoWatchID);

geoWatchID = null;