Javascript 为什么我的点击功能没有按预期工作?

Javascript 为什么我的点击功能没有按预期工作?,javascript,leaflet,Javascript,Leaflet,我已经创建了一个简单的js项目,该项目使用传单.js绘制了一系列点 然后,我想用点击事件的点特定数据填充一个信息窗口。但我似乎无法让它发挥作用 这大概就是我所做的: var circle = L.circle( [data[i]['latitude'], data[i]['longitude']], 50, { color: 'red', fillColor: 'red', fillOpacity: .5} ).addTo(map) .bindPopup(data[i][

我已经创建了一个简单的js项目,该项目使用传单.js绘制了一系列点

然后,我想用点击事件的点特定数据填充一个信息窗口。但我似乎无法让它发挥作用

这大概就是我所做的:

var circle = L.circle(
    [data[i]['latitude'], data[i]['longitude']],
    50,
    { color: 'red', fillColor: 'red', fillOpacity: .5}
).addTo(map)
.bindPopup(data[i]['SCHNAME'])
.on('click', fill_info_window(data, i));

function fill_info_window(data, i){ /* fill data */ }
不幸的是,它会自动用最新的数据填充窗口

为什么不起作用

您可以在此处看到该项目:


您可能希望将函数绑定为处理程序,而不是其调用结果。因此,删除调用并使用('click',fill\u info\u window')上的
。另请参见:无括号

您可能希望将函数绑定为处理程序,而不是调用它的结果。因此,删除调用并使用('click',fill\u info\u window')上的
。另请参见:无括号

在这一行:

.on('click', fill_info_window(data, i));
…您正在调用
填充信息窗口
函数,而不仅仅是引用它。您希望执行以下操作:

.on('click', function() {
    fill_info_window(data, i);
});
function makeHandler(theData, index) {
    return function() {
        fill_info_window(theData, index);
    };
}
除非你在一个循环中(这个
i
变量让我觉得你可能在循环中)。如果是,则:

.on('click', makeHandler(data, i));
…其中
makeHandler
如下所示:

.on('click', function() {
    fill_info_window(data, i);
});
function makeHandler(theData, index) {
    return function() {
        fill_info_window(theData, index);
    };
}
您不希望我的第一个答案出现在循环中的原因是,所有处理程序都将引用相同的
数据
i
变量,并在调用处理程序时查看它们的值,而不是在注册处理程序时。这就是为什么我们使用
makeHandler
函数的原因,因此它会创建一个不改变的闭包。更多关于我的博客:

关于这一行:

.on('click', fill_info_window(data, i));
…您正在调用
填充信息窗口
函数,而不仅仅是引用它。您希望执行以下操作:

.on('click', function() {
    fill_info_window(data, i);
});
function makeHandler(theData, index) {
    return function() {
        fill_info_window(theData, index);
    };
}
除非你在一个循环中(这个
i
变量让我觉得你可能在循环中)。如果是,则:

.on('click', makeHandler(data, i));
…其中
makeHandler
如下所示:

.on('click', function() {
    fill_info_window(data, i);
});
function makeHandler(theData, index) {
    return function() {
        fill_info_window(theData, index);
    };
}

您不希望我的第一个答案出现在循环中的原因是,所有处理程序都将引用相同的
数据
i
变量,并在调用处理程序时查看它们的值,而不是在注册处理程序时。这就是为什么我们使用
makeHandler
函数的原因,因此它会创建一个不改变的闭包。更多关于我的博客:

我不知道正确的参数是什么-我既没有传单的经验,也不知道
填充信息窗口的功能。你认为这就是他想要的吗?我猜他只是复制粘贴了函数签名。我不知道正确的参数是什么-我既没有使用传单的经验,也不知道填充信息窗口的功能。你认为这是他想要的吗?我猜他只是复制粘贴了函数签名。谢谢你,先生,这太棒了。@elksie5000:很高兴这有帮助!谢谢你,先生,这真是太棒了。@elksie5000:很高兴能帮上忙!