我有这个代码,检测经度和纬度,它设法输入但我无法检索输入值,请帮我找出问题所在。我试过jquery,它无法检索。
这是我的代码: -
var startPos;
navigator.geolocation.getCurrentPosition(function(position) {
startPos = position;
$('#pokemon_lat').val(startPos.coords.latitude);
$('#pokemon_long').val(startPos.coords.longitude);
}, function(error) {
alert('Error occurred. Error code: ' + error.code + '');
// error.code can be:
// 0: unknown error
// 1: permission denied
// 2: position unavailable (error response from locaton provider)
// 3: timed out
});
$(function($) {
// Asynchronously Load the map API
var script = document.createElement('script');
script.src = "//maps.googleapis.com/maps/api/js?key=shcschds&sensor=true&callback=initialize";
document.body.appendChild(script);
});
function initialize() {
var map;
var bounds = new google.maps.LatLngBounds();
var mapOptions = {
mapTypeId: 'roadmap'
};
// Display a map on the page
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
map.setTilt(45);
// Multiple Markers LatLong
var lat = document.getElementById("pokemon_lat").value;
var longi = document.getElementById("pokemon_long").value;
console.log('Lat:'+lat+' Long:'+longi);
}
答案 0 :(得分:1)
初始警告:从Chrome 50开始,Geolocation API为disabled,除非您使用的是加密连接(https://),这意味着在不安全的localhost或任何其他不安全的情况下这根本不起作用( http://)服务器。 Firefox也是pondering implementing。
在Geolocation API返回值和/或被接受之前,可能会调用initialize
函数。尝试使用延迟的promise / jQuery(因为您的代码表明您正在使用jQuery)来指示API何时完成或失败:
var startPos, positionPromise = $.Deferred();
navigator.geolocation.getCurrentPosition(function(position) {
startPos = position;
$('#pokemon_lat').val(startPos.coords.latitude);
$('#pokemon_long').val(startPos.coords.longitude);
// Huston, we have the location!
positionPromise.resolve();
}, function(error) {
alert('Error occurred. Error code: ' + error.code + '');
// error.code can be:
// 0: unknown error
// 1: permission denied
// 2: position unavailable (error response from locaton provider)
// 3: timed out
// Danger, Will Robinson! Danger!
positionPromise.reject();
});
window["initialize"] = function() {
var map;
var bounds = new google.maps.LatLngBounds();
var mapOptions = {
mapTypeId: 'roadmap'
};
// Display a map on the page
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
map.setTilt(45);
// Multiple Markers LatLong
$.when(positionPromise).then(function(){
var lat = document.getElementById("pokemon_lat").value;
var longi = document.getElementById("pokemon_long").value;
console.log('Lat:'+lat+' Long:'+longi);
}, function(){
console.log("Could not get latitude and longitude )-:");
}
);
}
$(function($) {
// Asynchronously Load the map API
var script = document.createElement('script');
script.src = "//maps.googleapis.com/maps/api/js?key=shcschds&sensor=true&callback=initialize";
document.body.appendChild(script);
});
<强>更新强>
更新了代码并正在使用JSFiddle。由于某种原因,initialize
函数未在全局范围内设置(可能通过外部函数添加)。要确保initialize
位于全局范围内,请使用window["initialize"]
。
答案 1 :(得分:0)
val()函数用于设置和获取输入类型元素的值。
在设置你正在使用val()的值时,但在获取它们的值时你使用了.value,我认为你不会在控制台中给你任何东西或者可能是错误。
所以改为:
var lat = document.getElementById("pokemon_lat").val();
var longi = document.getElementById("pokemon_long").val();
有关如何以及何时使用.val()以及何时使用.value - &gt;的更好解释,请参阅此处。 Get the value in an input text box
我希望这会奏效。
答案 2 :(得分:-2)
根本没有运行initialize
的声音。也许脚本正在加载(或已经在缓存中)并在initialize
设置之前运行。您可以尝试将initialize
移到jQuery ready事件之前。