Javascript 无法按id获取输入值

Javascript 无法按id获取输入值,javascript,jquery,google-api,google-maps-api-2,Javascript,Jquery,Google Api,Google Maps Api 2,我有这个代码,可以检测经度和纬度,它可以输入,但是我无法检索输入值,请帮我找到问题所在。我尝试了jquery,但它也无法检索 这是我的密码:- var startPos; navigator.geolocation.getCurrentPosition(function(position) { startPos = position; $('#pokemon_lat').val(startPos.coords.latitude);

我有这个代码,可以检测经度和纬度,它可以输入,但是我无法检索输入值,请帮我找到问题所在。我尝试了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);

}
val()函数用于设置和获取输入类型元素的值

在设置值时,您使用的是val(),但在获取它们的值时,您使用的是.value,我认为这不会给您带来任何信息,也不会给您的控制台带来错误

因此,将其更改为:

var lat = document.getElementById("pokemon_lat").val();
var longi = document.getElementById("pokemon_long").val();
有关如何以及何时使用.val()以及何时使用.value->


我希望这能起作用。

听起来好像根本没有运行
initialize
。可能脚本正在加载(或已在缓存中)并在设置
initialize
之前运行。您可以尝试在jQuery就绪事件之前将
initialize
移动到。

初始警告:从Chrome 50开始,除非您在加密连接(https://)上,否则地理位置API是无效的,这意味着这在不安全的本地主机或任何其他不安全的(http://)服务器上根本不起作用。Firefox也是如此

您的
initialize
函数可能在地理定位API返回值和/或被接受之前被调用。尝试使用promise/jQuery deferred(因为您的代码表明您正在使用jQuery)来指示API何时完成或失败:

var startPos,positionPromise=$.Deferred();
navigator.geolocation.getCurrentPosition(函数(位置){
startPos=位置;
$('pokemon'u lat').val(startPos.coords.latitude);
$('pokemon_long').val(startPos.coords.longitude);
//休斯顿,我们知道位置了!
承诺。决心();
},函数(错误){
警报('发生错误。错误代码:'+Error.code+'');
//错误代码可以是:
//0:未知错误
//1:拒绝许可
//2:位置不可用(locaton提供商的错误响应)
//3:超时
//危险,威尔·罗宾逊!危险!
承诺。拒绝();
});
窗口[“初始化”]=函数(){
var映射;
var bounds=new google.maps.LatLngBounds();
变量映射选项={
mapTypeId:“路线图”
};
//在页面上显示地图
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
地图.设置倾斜(45);
//多标记拉长
$.when(positionPromise).then(function(){
var lat=document.getElementById(“pokemon_lat”).value;
var longi=document.getElementById(“pokemon_long”).value;
log('Lat:'+Lat+'Long:'+longi);
},函数(){
log(“无法获取纬度和经度)-:”;
}
);
}
$(函数($){
//异步加载映射API
var script=document.createElement('script');
script.src=“//maps.googleapis.com/maps/api/js?key=shcschds&sensor=true&callback=initialize”;
document.body.appendChild(脚本);
});
更新:
更新的代码和工作模式。由于某种原因,
initialize
函数未在全局范围内设置(可能通过外部函数添加)。为确保
initialize
在全局范围内,您可以使用
window[“initialize”]

如何调用initialize函数?@user2181397 via google API
script.src=“//maps.googleapis.com/maps/API/js?key=shcschds&sensor=true&callback=initialize”没有记录任何内容吗?没有抛出错误吗?@谁知道根本没有错误…初始化函数不被称为Dhmm。。。。好像有问题。出现了一个错误:-
uncaughttypeerror:document.getElementById(…).val不是一个函数
哦,我忘了提到你需要在你的as中包含你的jQuery库。val()是一个jQuery函数如果你要使用jQuery路径,你必须使用
$(''pokemon lat').val()
就像您一开始就设置的那样。这个
$(选择器)
东西包装了您正在寻找的元素,并为您提供了所有额外的方法,如
.val()
。但听起来好像“MuthaFury”已经试过了……是的,我同意你的看法。我想我们需要HTML来看看这方面是否有问题。@MuthaFury,我看到了你的HTML。为什么所有的脚本文件都是在所有的HTML之后加载的,那也是在正文中。??所有的JS和CSS都应该放在头部,这样它们在加载HTML之前就准备好了,这样在需要对HTML元素进行任何前端操作的情况下,JS和CSS都是事先准备好的,而不是在加载HTML之后准备好的。始终将JS和CSS放在头脑中。。永远。!!如果initialize根本没有运行,我将根本不会有console.log…啊--我问过是否有任何记录或抛出的错误,但你说没有。很抱歉。是的,但请注意,我的http不是HTTPS,我尝试了你的解决方案,没有work@MuthaFury-我稍微更新了代码,以确保
initialize
始终在全局范围内,这样Google的回调将正常运行,并添加了一个工作的JSFIDLE。没问题,很高兴我能提供帮助!