无法通过id获取输入值

时间:2016-07-21 06:54:50

标签: javascript jquery google-api google-maps-api-2

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

}

3 个答案:

答案 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事件之前。