当我尝试将多个点击侦听器添加到标记 django 时,initMap 不是一个函数

Posted

技术标签:

【中文标题】当我尝试将多个点击侦听器添加到标记 django 时,initMap 不是一个函数【英文标题】:initMap is not a function when I try to add multiple click listeners to markers django 【发布时间】:2020-02-18 19:55:23 【问题描述】:

我在我的 Django 项目的 html 页面中使用了 Google 地图,效果很好,添加了多个标记,效果很好。

当我试图捕捉每个标记的点击事件时,它给了我这个错误initMap is not a function,

这是我的代码:

    <style>
        #map 
            height: 400px; /* The height is 400 pixels */
            width: 100%; /* The width is the width of the web page */
        
    </style>
    <div id="map"></div>
    <script>
        // Initialize and add the map
        function initMap() 
            var gmarkers = [];
            const cairo = lat: the_lat, lng: the_long;
            const map = new google.maps.Map(
                document.getElementById('map'), zoom: 15, center: cairo);
            // The marker, positioned at Uluru
            % for item in all_data %

                var location item.val.station_geohash  = 
                    lat:item.val.station_latitude,
                    lng: item.val.station_longitude 
                ;
                var marker item.val.station_geohash  = new google.maps.Marker(
                    position: location item.val.station_geohash ,
                    map: map,
                    draggable: false,
                    title: "item.val.station_name",
                    animation: google.maps.Animation.DROP,
                );

                gmarkers.push(marker item.val.station_geohash );
                google.maps.event.addListener(marker item.val.station_geohash , 'click', function () 
                var name = marker.title;
                alert(name)
            

            % endfor %

        );


        
    </script>
    <script async defer
            src="https://maps.googleapis.com/maps/api/js?key=***************************&callback=initMap">
    </script>

【问题讨论】:

【参考方案1】:

看起来您在从内部封装标记单击事件侦听器之前结束了 for 循环。你能试试下面的代码,看看你是否仍然得到同样的范围错误?

function initMap() 
  var gmarkers = [];
  const cairo = lat: the_lat, lng: the_long;
  const map = new google.maps.Map(
      document.getElementById('map'), zoom: 15, center: cairo);

  % for item in all_data %

      var location item.val.station_geohash  = 
          lat:item.val.station_latitude,
          lng: item.val.station_longitude 
      ;
      var marker item.val.station_geohash  = new google.maps.Marker(
          position: location item.val.station_geohash ,
          map: map,
          draggable: false,
          title: "item.val.station_name",
          animation: google.maps.Animation.DROP,
      );

      gmarkers.push(marker item.val.station_geohash );
      google.maps.event.addListener(marker item.val.station_geohash , 'click', function () 
        var name = marker.title;
        alert(name)
      );

  % endfor %

【讨论】:

以上是关于当我尝试将多个点击侦听器添加到标记 django 时,initMap 不是一个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在点击侦听器的标记中删除标记?

如何在 Django 中一次将多个对象添加到 ManyToMany 关系?

是否可以将 onclick 侦听器添加到 QCheckBox?

如何在 mapbox-gl-js 的标记上添加“点击”侦听器

如何以最少的数据库点击次数将多个实例添加到 Django 反向外键集?

ANDROID STUDIO - 如何将标记添加到当前位置?