javascript - jshint - 不要在循环内创建函数 - 谷歌地图

标签 javascript google-maps loops gulp jshint

我创建了一个带有一些标记的谷歌地图(来自 wordpress 帖子),但是当我在控制台上运行“gulp”时出现此错误:“不要在循环内创建函数。”

我创建了一个 jsfiddle为了复制我的本地主机情况,任何人都可以帮助我解决这个问题吗?

我知道如果我写“//jshintignore:line”gulp创建脚本,但我认为这个问题可能是我在chrome上遇到的另一个错误的问题:(

var infowindow = new google.maps.InfoWindow();
var gmarkers = []; 

function initialize() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 10,
    center: new google.maps.LatLng(51.508293, -0.127701),
    mapTypeControl: false,
    panControl: false,
    zoomControlOptions: {
        position: google.maps.ControlPosition.RIGHT_CENTER
    },
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  for (var i = 0; i < locations.length; i++) {
    var marker = new google.maps.Marker({
      position: locations[i].latlng,
      icon: locations[i].marker,
      map: map,
      animation: google.maps.Animation.DROP,
      optimized : false
    });

    gmarkers.push(marker);

    google.maps.event.addListener(marker, 'click',
      (function(marker, i) {
        return function() {
          map.panTo(marker.getPosition());

          //method 2
          var target = jQuery("#item" + i);
          jQuery(target).show().siblings("div").hide();

          if (!jQuery('#all-posts').hasClass('active')){
            jQuery("#all-posts").toggleClass("active");
            jQuery("#close-btn").toggleClass("active");
          }

          // stop yt video
          //jQuery("#stop-yt-video").trigger("click");
        };
      })(marker, i)
    );  
  }
}

initialize();

最佳答案

取出您的 IIFE 函数,将其移出循环并为其命名,例如 makeHandler (但不调用它)

function makeHandler(marker, i) {
  return function() {

    map.panTo(marker.getPosition());

    //method 2
    var target = jQuery("#item" + i);
    jQuery(target).show().siblings("div").hide();

    if (!jQuery('#all-posts').hasClass('active')){
          jQuery("#all-posts").toggleClass("active");
          jQuery("#close-btn").toggleClass("active");
    }
    // stop yt video
    //jQuery("#stop-yt-video").trigger("click");
  };
}

然后在循环中执行以下操作:

for (var i = 0; i < locations.length; i++) {
  var marker = new google.maps.Marker({
    position: locations[i].latlng,
    icon: locations[i].marker,
    map: map,
    animation: google.maps.Animation.DROP,
    optimized : false
  });
  gmarkers.push(marker);

  google.maps.event.addListener(marker, 'click', makeHandler(marker, i)); 
}

关于javascript - jshint - 不要在循环内创建函数 - 谷歌地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172520/

相关文章:

javascript - ionic 2 : Google Map Custom Controls Not Working

javascript - 将方形或圆形图像放入谷歌地图中的直线路径中

javascript - Node 路由功能不执行任何操作

循环内的 JavaScript 闭包 – 简单的实际示例

javascript - 在 block 助手中使用 Ember 的 Handlebars #each 助手,将数组切成 block

javascript - 回调 - 未定义

javascript - 单击文本链接时如何打开文件上传提示?

javascript - 在哪里发布代码以供开源使用?

java - 包含信用卡过期年份的字符串数组,从当前年份算起再算 10 年

excel - VBA 循环填充表格