Javascript 在jQuery插件中向Google地图添加标记

Javascript 在jQuery插件中向Google地图添加标记,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我在创建一个函数时遇到了麻烦,该函数在实例化后会将标记添加到我的谷歌地图中。以下是我的整个jQuery插件: function ($) { $.fn.eqpMap = function (options) { var mapContainer = this; $.fn.map.container = this; $.fn.map.map = null; $.fn.map.defaults = { adr1: null, ad

我在创建一个函数时遇到了麻烦,该函数在实例化后会将标记添加到我的谷歌地图中。以下是我的整个jQuery插件:

function ($) {

$.fn.eqpMap = function (options) {
    var mapContainer = this;

    $.fn.map.container = this;

    $.fn.map.map = null;

    $.fn.map.defaults = {
        adr1: null,
        adr2: null,
        adr3: null,
        cp: null,
        ville: null,
        geocodeAPI: "gouv",
        coordinates: {
            lat: null,
            lon: null
        },
        pays: "France",
        zoom: 15,
        osm: {
            layer: "http://{s}.tile.osm.org/{z}/{x}/{y}.png",
            options: {
                fullscreenControl: true
            }
        },
        google: {
            options: {
                googleKey: null,
                streetViewControl: false,
                mapTypeControl: false
            }
        }
    };


    var opts = $.extend(true, {}, $.fn.map.defaults, options);

    function displayMap(location) { //location {lat: 1, lon: 1}

        if (opts.geocodeAPI == "google") {
            opts.google.options.center = location;
            $.fn.map.map = new google.maps.Map(mapContainer[0], opts.google.options);
            var marker = new google.maps.Marker({ position: opts.google.options.center, map: $.fn.map.map });
        } else {
            //Récupère l'attribut id de l'element
            let idContainer = $(mapContainer).attr('id');
            opts.osm.options.center = location;
            if (typeof L.Control.Fullscreen == 'undefined') {
                delete opts.osm.options.fullscreenControl;
            }
            $.fn.map.map = L.map(idContainer, opts.osm.options);
            L.tileLayer(opts.osm.layer, {
                attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
            }).addTo($.fn.map.map);
            $.fn.map.map.attributionControl.setPrefix(false);
            var marker = new L.marker(opts.osm.options.center, {});
            $.fn.map.map.addLayer(marker);
        }
    }

    return this;
};

$.fn.eqpMap.addMarker = function (marker) {
    var markers = null;
    if ($.fn.map.opts.geocodeAPI !== "google") {
        markers = new L.marker(marker, {});
        window.addEventListener('load', function () {
            console.log('osm');
            $.fn.map.map.addLayer(markers);
        })
    } else {
        markers = {lat: marker.lat, lng: marker.lon};
        window.addEventListener('load', function () {
            console.log('google');            
            console.log(markers);
            var markerGoogle = new google.maps.Marker({ position: markers, map: $.fn.map.map });
            markerGoogle.setMap($.fn.map.map);
        })
    }
}

 }(jQuery));
函数($){
$.fn.eqpMap=函数(选项){
var mapContainer=this;
$.fn.map.container=这个;
$.fn.map.map=null;
$.fn.map.defaults={
adr1:null,
adr2:null,
adr3:null,
cp:null,
维尔:空,
geocodeAPI:“gouv”,
坐标:{
lat:null,
lon:null
},
支付:“法国”,
缩放:15,
osm:{
层:“http://{s}.tile.osm.org/{z}/{x}/{y}.png”,
选项:{
fullscreenControl:true
}
},
谷歌:{
选项:{
googleKey:null,
街景控制:错误,
mapTypeControl:false
}
}
};
var opts=$.extend(true,{},$.fn.map.defaults,options);
函数显示映射(位置){//location{lat:1,lon:1}
如果(opts.geocodeAPI==“谷歌”){
opts.google.options.center=位置;
$.fn.map.map=新的google.maps.map(mapContainer[0],opts.google.options);
var marker=new google.maps.marker({position:opts.google.options.center,map:$.fn.map.map});
}否则{
//元素属性
让idContainer=$(mapContainer.attr('id');
opts.osm.options.center=位置;
if(typeof L.Control.Fullscreen==“未定义”){
删除opts.osm.options.fullscreenControl;
}
$.fn.map.map=L.map(idContainer,opts.osm.options);
L.tileLayer(选择osm.layer{
属性:“©;贡献者”
}).addTo($.fn.map.map);
$.fn.map.map.AttributeControl.setPrefix(false);
var marker=newl.marker(opts.osm.options.center,{});
$.fn.map.map.addLayer(标记);
}
}
归还这个;
};
$.fn.eqpMap.addMarker=函数(标记){
var=null;
如果($.fn.map.opts.geocodeAPI!=“谷歌”){
markers=新的L.marker(marker,{});
window.addEventListener('load',函数(){
console.log('osm');
$.fn.map.map.addLayer(标记);
})
}否则{
markers={lat:marker.lat,lng:marker.lon};
window.addEventListener('load',函数(){
log('google');
控制台日志(标记);
var markerGoogle=new google.maps.Marker({position:markers,map:$.fn.map.map});
markerGoogle.setMap($.fn.map.map);
})
}
}
}(jQuery));

每次我尝试在我的
addMarker
方法中添加一个标记时,它都不会添加,因为它找不到
$.fn.map.map
。我还试图通过
window.google.maps.map
访问地图,但它似乎不起作用,所有这些都不会给我带来任何错误来帮助。

如何将地图附加到DOM?@gmazoni我不太明白,但地图是使用google对象创建的(我可能错了):$.fn.map.map=new google.maps.map(mapContainer[0],opts.google.options);我试图用你的$.fn.map.map解除对上下文的理解,可能是因为addMarker试图添加到一个不正确的映射initialized@gmazoni这就是为什么我的addMarker方法中有一个eventListener,因为我不想等待页面加载和映射初始化。你保证“加载”会等待映射初始化吗?你能用回叫吗?