это не похоже на проблему области видимости. getDirections находится в той же области видимости.
это яйцо против курицы. в конечном итоге - ваша строка html не находится в DOM, поэтому вы не можете просто добавить к ней события или ссылаться на ее элементы. информационное окно слегка асинхронно, поэтому вам нужно убедиться, что контентный div подключен. Или вам нужно использовать делегирование событий.
шаблон событий, предоставляемый Google, очень удобен, чтобы прикрепить обработчик отправки к элементу domready
div следующим образом:
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);
проверено и работает. В качестве альтернативы, вы можете прикрепить строку содержимого в dom как дочерний элемент некоторого скрытого элемента div, добавить событие и затем передать элемент div в качестве содержимого, поскольку оно поддерживает указание на узел.
https://developers.google.com/maps/documentation/javascript/infowindows
альтернативно, вы можете использовать делегирование событий
например.
topnode.addEvent('submit:relay(#map-form)', function(e){ });
- или эквивалентный jQuery, например $(document).on('submit', '#map-form', fn)