tr javascript上的事件监听器

时间:2015-12-27 23:17:06

标签: javascript html-table addeventlistener

我构建了一个表格,其中包含来自表单输入的行。 我有一个输入字段用于地址(使用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())
  });
}

我没有错误但是当我点击没有任何反应!!!

1 个答案:

答案 0 :(得分:0)

在for ...循环中,事件监听器是一个闭包(通知w在事件监听器函数之外定义)。调用事件侦听器时,它将获取变量w的值,即tablet.length,而不是添加事件侦听器时的值。要解决此问题,您可以创建一个创建事件侦听器的函数:

function getEventListener(idx) { return function() {
    map.setCenter(markers[idx].getPosition());
})

在for循环中,通过调用以下函数添加事件侦听器:

tableTr[w].addEventListener("click", getEventLisener(w));