我构建了一个表格,其中包含来自表单输入的行。
我有一个输入字段用于地址(使用google maps api自动完成)。
我有一个在地图上有标记的数组和一个包含所有tr(来自表格主体)的数组。
我正在尝试在eventListener
上放置tr (onclick)
,以便将地图置于相应标记的中心位置。
两个数组上的索引对应(标记数组上的0位置表示在地图上包含该地址的tr)
tableTr = tableBody.getElementsByTagName("tr");
for (w = 0; w < tableTr.length; w++) {
tableTr[w].addEventListener("click", function () {
map.setCenter(markers[w].getPosition())
});
}
我没有错误但是当我点击没有任何反应!!!
答案 0 :(得分:0)
在for ...循环中,事件监听器是一个闭包(通知w在事件监听器函数之外定义)。调用事件侦听器时,它将获取变量w的值,即tablet.length,而不是添加事件侦听器时的值。要解决此问题,您可以创建一个创建事件侦听器的函数:
function getEventListener(idx) { return function() {
map.setCenter(markers[idx].getPosition());
})
在for循环中,通过调用以下函数添加事件侦听器:
tableTr[w].addEventListener("click", getEventLisener(w));