我有一个附加到表单开关的事件处理程序
$("#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函数,但不会收到返回值。
答案 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);