【问题标题】:Google maps - pass information into an event Listener谷歌地图 - 将信息传递给事件监听器
【发布时间】:2010-09-30 03:08:33
【问题描述】:

我认为这是一个范围问题。由于事件是在我添加了所有侦听器后触发的,因此 num_markers 始终被循环中的下一个循环覆盖。

有什么方法可以将变量传递给事件函数吗?

我尝试了这种方法,但它不适合我。 Google Maps: Event Listener only remembering final value of variable

            var map = new google.maps.Map(document.getElementById("map_canvas"),
            myOptions);
            var info_window = new google.maps.InfoWindow();
            var markers = [];
function load_markers() {
                var bounds_url = map.getBounds().toUrlValue();
                $.ajax({
                    url:'/retailer-markers?bounds='+bounds_url,
                    dataType: 'json',
                    success: function(data) {
                        for(i = 0; i < data.length; i++) {
                            var marker_pos = new google.maps.LatLng(data[i]['lat'], data[i]['long']);
                            //Every time the listener event is called this number is the length of the array
                            var marker_num = get_markers_count();

                            markers[marker_num] = new google.maps.Marker({
                                position: marker_pos,
                                map: map,
                                title:data[i]['Title'],
                                icon: image
                            });

                            google.maps.event.addListener(markers[marker_num], 'click', function() {
                                info_window.setContent('hello');
                                var pos = markers[marker_num].getPosition();
                                info_window.setPosition(pos);
                                info_window.open(map, markers[marker_num]);
                            });


                        }
                    }
                });
            }

【问题讨论】:

    标签: javascript google-maps scope google-maps-api-3


    【解决方案1】:

    解决方案是使用this 作为标记详细信息。可以使用marker.set('some_var', data); 将任何其他变量设置到标记上

    $.ajax({
                            url:'/retailer-markers?bounds='+bounds_url,
                            dataType: 'json',
                            success: function(data) {
                                for(i = 0; i < data.length; i++) {
                                    var info_window = get_info_window();
    
                                    var marker_pos = new google.maps.LatLng(data[i]['lat'], data[i]['long']);
    
                                    marker_num = get_markers_count();
    
                                    marker = new google.maps.Marker({
                                        position: marker_pos,
                                        map: map,
                                        title:data[i]['Title'],
                                        icon: image
                                    });
    
                                    markers.push(marker);
                                    marker.set('retailer', data[i]);
    
                                    google.maps.event.addListener(marker, 'click', function() {
                                        var retailer = this.get('retailer');
    
                                        info_window.setContent(retailer['name']);
                                        info_window.open(map, this);
                                    });
    
    
                                }
                            }
                        });
    

    【讨论】:

    • .get.set 对我的项目有很大帮助,干杯!
    • .set 方法有效,因为google.maps.Marker 类扩展了google.maps.MVCObject
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多