从附加到表单事件的navigator.geolocation函数返回值时出现问题

时间:2016-10-12 15:30:08

标签: jquery geolocation

我有一个附加到表单开关的事件处理程序

$("#formSwitch").on('change', function() {

var geoOptions = {
    maximumAge: 5 * 60 * 1000,
    }

var geoSuccess = function(position) {

      /***** do some stuff here ****/
      return ( true );

      };

var geoError = function(error) {

   /***** do some stuff here ****/
   return ( false );

   };

var status = navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);

console.log(status); /******** Geolocation works but gives undefined here ******/

return(status);                         

});

我想要触发切换并确定geoLocation状态,所以我尝试过:

 if( !$("#formSwitch").val("on").change() ) {

    /****** geoLocation is false so do some stuff here ******/

    }

这会触发开关,调用geoLocation函数,但不会收到返回值。

1 个答案:

答案 0 :(得分:0)

也许您应该考虑检查浏览器是否支持地理位置:if (navigator.geolocation !== undefined){/* do geolocation stuff here */}

某些浏览器在本地开发中的某些条件下已开始阻止地理定位,并且可能在浏览器中无声地失败:https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only#does_this_affect_local_development

此外,由于地理定位回调是异步的,因此最好将控制台日志放在geoSuccess和geoError回调中。在getCurrentPosition返回任何内容之前,可能正在评估console.log。

尝试将依赖于成功/失败回调的代码添加到回调本身:

var geoOptions = {
    maximumAge: 5 * 60 * 1000,
    }

var geoSuccess = function(position) {

      /***** do some stuff here ****/
      console.log(true);

      };

var geoError = function(error) {

   /***** do some stuff here ****/
   console.log(false);

   };

var status = navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);