javascript - Google map - 将信息传递给事件监听器

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

我认为这是一个范围问题。由于事件是在我添加了所有监听器之后触发的,因此 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]);
                            });


                        }
                    }
                });
            }

最佳答案

解决方案是使用 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);
                                });


                            }
                        }
                    });

关于javascript - Google map - 将信息传递给事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827409/

相关文章:

android - 解析来自 google direction api 的 json 响应

google-maps - 如何访问重叠的 geojson/多边形以显示在信息框中

javascript - 如果字段不为空,则允许 AJAX Post on.click 吗?

javascript - 解码音频数据 - 无法解码音频数据

javascript - jQuery 选择器 -> 特定表中的所有 TD

object - 访问对象内的字值

javascript - 尝试失去范围

javascript - 通过部分匹配求两个数组的交集

android - GPS 安卓错误!

javascript - AngularJs $watch 没有绑定(bind)