javascript - 如何使用 Google map 事件监听器传递变量并提交表单

标签 javascript google-maps-api-3 dom-events

我正在关注 Google map v3 演示库示例 here ,这是一个矩形叠加。我修改了矩形以使其可点击。

rectangle = new google.maps.Rectangle({
   map: map,
   clickable: true
});

然后我向矩形添加了一个事件监听器

google.maps.event.addListener(rectangle, 'click', editSite);

并制定了一种方法来提交表单,并且工作正常。

function editSite() {
    document.getElementById("siteSelection").value = 22;
    document.siteSelectionForm.submit();
}

接下来,我通过添加参数更改了 editSite 的签名。

google.maps.event.addListener(rectangle, 'click', editSite(22));

...

function editSite(siteId) {
    document.getElementById("siteSelection").value = siteId;
    document.siteSelectionForm.submit();
}

它停止正常工作。 map 加载后,表单就会立即提交,这是在我有机会单击矩形之前。就好像该方法在页面重新加载期间添加到监听器后立即被调用。

我的目标是能够创建许多矩形,每个矩形在单击时将唯一的 ID 传递给 editSite。我怎样才能做到这一点并避免我造成的问题?

最佳答案

这不会达到您的预期(并且缺少结束符“)”,这是一个拼写错误吗?):

google.maps.event.addListener(rectangle, 'click', editSite(22);

不带参数的“editSite”是一个函数指针(在您的“工作”代码中):

google.maps.event.addListener(rectangle, 'click', editSite);

如果添加参数,它将立即执行,并且返回值用作事件发生时要执行的函数(在本例中不是您想要的)。如果您想使用参数调用命名函数,请将其包装在匿名函数中:

google.maps.event.addListener(rectangle, 'click', function() {
  editSite(22);
});

关于javascript - 如何使用 Google map 事件监听器传递变量并提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273986/

相关文章:

javascript - 单击时 HTML 字段中的文本会消失吗?

javascript - Angularjs 与 # 导航链接中的 jquery 插件相关的问题

javascript - 检查元素是否有东西

javascript - JS : GetElementsByName from within form

jquery - 在 Google map 中预加载可编辑的绘图管理器多边形

javascript - 带返回值的 image.onload 函数

javascript - 将 DOMContentLoaded 监听器附加到动态创建的窗口

javascript - javascript中的尾随零

javascript - 如何在谷歌地图中指定位置?

javascript - Google Maps API v3 - 标记全部共享相同的信息窗口