它看起来不像范围问题。 getDirections 处于同一范围内。
这是一个鸡蛋与鸡肉的案例。最终 - 你的 html 字符串不在 DOM 中,所以你还不能向其中添加事件或引用其中的元素。信息窗口稍微异步,因此您需要确保附加了内容 div。或者,您需要使用事件委托。
google 提供的事件模式可以方便地将提交处理程序附加到 div 上domready
像这样:
var infoWindowContent = [
"<b>Get Directions From...</b><br />",
"<form id='map-form'>",
"Address/Postcode: <input id='map-from-address' type='text' />",
"<input type='submit' id='map-go' value='Go' />",
"</form>"
].join("");
var info = new google.maps.InfoWindow({
content: infoWindowContent
});
google.maps.event.addListener(info, 'domready', function() {
document.id("map-form").addEvent("submit", function(e) {
e.stop();
console.log("hi!");
});
});
info.open(map, marker);
经过测试并工作。或者,您可以将内容字符串作为某些隐藏 div 的子级附加到 dom 中,添加事件,然后将 div 作为内容传递,因为它支持指向节点。
https://developers.google.com/maps/documentation/javascript/infowindows https://developers.google.com/maps/documentation/javascript/infowindows
或者,您可以使用事件委托
eg.
topnode.addEvent('submit:relay(#map-form)', function(e){ });
- 或等效的 jQuery,例如$(document).on('submit', '#map-form', fn)