2016-06-22 8 views
3

Ich habe einige Probleme mit JavaScript watchPosition und clearWatch Funktionen, die ich nicht ganz verstehe, würde es begrüßen, wenn jemand helfen könnte.JavaScript - clearWatch() triggert nicht auf setTimeout()

Zunächst einmal, die Funktion in Frage ...

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

Insbesondere ist mein Problem mit dem Code in dem setTimeout Abschnitt.

Wenn ich diese Funktion auf meinem Laptop ausfühle, beginnt alles in Ordnung - die Felder .Longitude, .Latitude und .Accuracy sind entsprechend ausgefüllt. Nach 10 Sekunden wird setTimeout ausgelöst - ich kann nicht sagen, ob clearWatch erfolgreich ausgeführt wird (da der Computer ziemlich in seiner Fähigkeit ist, sich selbst zu finden), aber das seltsame Verhalten, das ich hier notiere, ist, dass alert('done') zweimal ausgelöst wird.

Wenn ich diese Funktion auf meinem Telefon (der vorgesehenen Plattform) starte, geht alles ähnlich gut an, aber nach 10 Sekunden beginnt alert('done') endlos zu starten, manchmal in unmittelbarer Folge, manchmal mit ein paar Sekunden dazwischen. Am beunruhigendsten ist jedoch, dass ClearWatch scheinbar überhaupt nicht läuft - dass Lat-, Long- und Accuracy-Felder nach der 10-Sekunden-Marke kontinuierlich aktualisiert werden.

Wenn jemand sehen kann, was ich hier falsch mache, würde Ihre Anleitung sehr geschätzt werden.

+0

try bewegen showPosition außerhalb Standort Funktion –

+0

Sie die mehrfach SetTimeout Start - jedes Mal, dass Funktion aufgerufen wird, so ist es auch, wenn die Uhr alarmiert wurde nach den ersten 10 Sekunden gelöscht. Vielleicht nur setTimeout aufrufen, wenn Sie es vorher nicht getan haben? – madebydavid

Antwort

2

Ich traf ein ähnliches Problem. Ich fand den folgenden Code die Uhr nicht stoppen war:

navigator.geolocation.clearWatch(locationID); 

Schritt 1: Erstellen Sie eine Variable, und weisen Sie

var geoLoc = navigator.geolocation; 

var geoWatchID = geoLoc.watchPosition(
       onGPSSuccess, onGPSError, 
      { maximumAge: 300, timeout: 1500, enableHighAccuracy: true }); 

SCHRITT 2 navigator.geolocation: Stoppuhr die verwenden var geoloc nicht navigator.geolocation.clearWatch()

geoLoc.clearWatch(geoWatchID); 

geoWatchID = null; 

Siehe http://www.tutorialspoint.com/html5/geolocation_clearwatch.htm

0

Ohne zu wissen, die Bibliotheken den Code neu zu erstellen, kann ich das Problem nicht duplizieren, so kann ich nur etwas zu versuchen geben.

Fügen Sie Ihrem äußeren Bereich eine timer Variable hinzu.

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