未定义的全局变量JS

时间:2017-08-22 17:51:49

标签: javascript cordova openstreetmap

我正在制作一个带有cordova的Android应用程序。我有一个noob问题。

我在index.html中有一张地图,当索引初始化应用程序时获取移动设备的位置,然后使用移动设备所在的标记执行地图。

代码是这样的:

var longitud;
var latitud;

function getPosition() {

                        var options = {
                            enableHighAccuracy: true,
                            maximumAge: 1
                        }
                        var watchID = navigator.geolocation.getCurrentPosition(onSuccess, onError, options);

                        function onSuccess(position) {

                            this.latitud = position.coords.latitude;
                            this.longitud = position.coords.longitude;

                            navigator.geolocation.clearWatch(watchID);
                            mapa();
                        };

                        function onError(error) {
                            alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n');
                        }
}

 function mapa() {   

                         alert(this.latitud + ' ' + this.longitud);
                            document.getElementById("mapa").innerHTML = "";
                            map = new OpenLayers.Map("mapa");
                            var mapnik = new OpenLayers.Layer.OSM();
                            var fromProjection = new OpenLayers.Projection("EPSG:4326"); // Transform from WGS 1984
                            var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection
                            var position = new OpenLayers.LonLat(window.longitud, window.latitud).transform(fromProjection, toProjection);
                            var zoom = 17;

                            map.addLayer(mapnik);
                            map.setCenter(position, zoom);

                            var lonLat = new OpenLayers.LonLat(this.longitud, this.latitud)
                                .transform(
                                    new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
                                    map.getProjectionObject() // to Spherical Mercator Projection
                                );



                            var markers = new OpenLayers.Layer.Markers("Markers");
                            map.addLayer(markers);

                            //markers.icon(img/ico-taxi);
                            markers.addMarker(new OpenLayers.Marker(lonLat));

                        }

这在index.html中运行良好。但在其他页面我想做同样的事情,但不是总是显示,只显示用户点击手风琴,因为用户必须知道他们在哪里,但我不想在这个页面中一直有一个大的地图。当用户打开手风琴时,app会使用相同的功能创建一个地图,因为div id是相同的。这也很好用,但另外我想把坐标放在两个输入中:inputLat和Input Lon。当用户点击输入中的手风琴时出现未定义但理论上是在index.html中定义的,当他点击手风琴时。但最奇怪的是,当我关闭手风琴并再次打开时,会出现坐标。如何在第一次使用clik手风琴时输入坐标?我给你手风琴功能的代码。

function comprobar() {
var x = document.getElementById("mapa");
if (x.className.indexOf("w3-show") == -1) {
    x.className += " w3-show";
    getPosition();
    geoLocalizacion();


} else { 
    x.className = x.className.replace(" w3-show", "");
}
}

function geoLocalizacion () {
 document.getElementById("inputLat").value = this.latitud;
 document.getElementById("inputLon").value = this.longitud;

}

我试图阅读其他类似的帖子但不起作用。如果我添加var Longitud = this;在它显示的声明中[对象窗口]

javascript returns undefind for a globally declared variable

Why a variable defined global is undefined?

感谢所有我非常确定这是一个菜鸟。

0 个答案:

没有答案