无法通过 id 获取输入值

failed to get input value by id

我有这个检测经度和纬度的代码,它成功地输入了但我无法检索输入值,请帮我找出问题所在。我试了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 -> Get the value in an input text box

我希望这会奏效。

听起来 initialize 根本不是 运行。也许脚本正在加载(或已经在缓存中)并且 运行ning 在 initialize 设置之前。您可以尝试将 initialize 移动到 jQuery 就绪事件之前。

初始警告:自 [​​=30=] 50 起,地理位置 API 也是 disabled unless you are on an encrypted connection (https://) which means this will not work at all on an insecure localhost or any other insecure (http://) server. Firefox is also pondering implementing

您的 initialize 函数可能在接受地理位置 API returns 值 and/or 之前被调用。尝试使用 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"].