javascript - 我想让 model[i].marker.addListener ('click' , function() { 在 for 循环之外

标签 javascript

此代码运行但不符合javascript 最佳实践,我想添加 model[i].marker.addListener('click', function() 在 for 循环之外,但我遇到了问题。

function pushMarkers() {
locInfo = new google.maps.InfoWindow();
for (var i = 0; i < model.length; i++) {
    var loc = model[i].places;
    var title = model[i].title;
    model[i].marker = new google.maps.Marker({
        position: loc,
        title: title,
        animation: google.maps.Animation.DROP,
        map: map,
        id: i
    });
    console.log(model[i].title);
    model[i].marker.addListener('click', function() {
        console.log('InfoWindow Loop entered');
        toggleBounce(this);
        populateInfoWindow(this, locInfo);
    });
    wikiLink(model[i].marker);
  }
}

最佳答案

您只需创建一个命名函数用作回调,然后使用它:

function pushMarkers() {

    // Create it
    function mapClickCallback() {
        console.log('InfoWindow Loop entered');
        toggleBounce(this);
        populateInfoWindow(this, locInfo);
    }

    locInfo = new google.maps.InfoWindow();
    for (var i = 0; i < model.length; i++) {
        var loc = model[i].places;
        var title = model[i].title;
        model[i].marker = new google.maps.Marker({
            position: loc,
            title: title,
            animation: google.maps.Animation.DROP,
            map: map,
            id: i
        });
        console.log(model[i].title);
        model[i].marker.addListener('click', mapClickCallback); // <−−−− Use it
        wikiLink(model[i].marker);
    }
}

函数定义在 locInfo 之上很好,但是如果您愿意,可以将函数声明放在 pushMarkers 中的任何位置,只要它在那个功能。 (从 ES2015 开始,不在顶层使用函数声明是定义的行为,但这里没有必要,而且它的规则有点复杂。)


旁注:您的代码正在成为 The Horror of Implicit Globals 的牺牲品(那是我贫血的小博客上的一篇文章);请务必使用 var 声明 locInfo

关于javascript - 我想让 model[i].marker.addListener ('click' , function() { 在 for 循环之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485138/

相关文章:

javascript - 创建具有可在函数作用域内外访问的属性的函数

javascript - 在 Javascript 中修改另一个元素内的元素的类

javascript - 隐藏和显示与另一个元素同步的元素

javascript - 编译导入其他js文件的LiveScript

带有 jQ​​uery 的 Safari 和 Firefox 中的 Javascript(严格)错误

javascript - Jasmine 模拟第二种方法

javascript - 什么是将两个对象解构为一个对象并连接特定键的好方法?

javascript - 禁用移动设备的 jquery 脚本

javascript - 有没有办法用 mathjs 矩阵对象进行数组推送?

javascript - 直接在 Google Firestore 中获取 DocumentId