Javascript 将事件添加到Google Maps API信息窗口内的元素
我想在Google Maps API v3信息窗口中放置一个带有输入字段和提交按钮的表单 提交时,我想调用一个函数,该函数使用输入字段中输入的地址启动方向服务 这是我的代码,我目前只测试方向事件是否被触发。我已经编写了完整的getDirections事件,可以确认它可以正常工作,并在正确触发时返回方向: 我尝试使用MooTools添加事件侦听器,如下所示:Javascript 将事件添加到Google Maps API信息窗口内的元素,javascript,google-maps-api-3,mootools,infowindow,mootools-events,Javascript,Google Maps Api 3,Mootools,Infowindow,Mootools Events,我想在Google Maps API v3信息窗口中放置一个带有输入字段和提交按钮的表单 提交时,我想调用一个函数,该函数使用输入字段中输入的地址启动方向服务 这是我的代码,我目前只测试方向事件是否被触发。我已经编写了完整的getDirections事件,可以确认它可以正常工作,并在正确触发时返回方向: 我尝试使用MooTools添加事件侦听器,如下所示: var infoWindowContent = "<b>Get Directions From...</b>&l
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>";
var infoWindow = new google.maps.InfoWindow({
content: infoWindowContent
});
google.maps.event.addListener(marker, 'click', function() {
infoWindow.open(map, marker);
dbug.log($("map-form"));
$("map-form").addEvent("submit", getDirections);
});
function getDirections(event)
{
dbug.log("getDirections");
event.stop();
}
当我在我的站点的其他地方使用MooTools时,我将所有代码放在window.addEvent'load',function{…}
注意控制台跟踪dbug.log$map表单;正确输出表单元素,但事件未触发
我已经将相同的事件添加到DOM中具有不同ID的另一个表单中,它运行良好
那么,如果MooTools可以找到元素并假定添加事件侦听器,那么是什么阻止了事件的触发呢?这是范围问题吗?它看起来不像范围问题。getDirections在同一范围内 这是一个鸡蛋对鸡的案子。最终,您的html字符串不在DOM中,因此您还不能向其中添加事件或引用其中的元素。info窗口有点异步,因此需要确保连接了content div。或者,您需要使用事件委派 google提供的事件模式可以方便地将提交处理程序附加到div的domready上,如下所示: 测试和工作。或者,您可以将内容sting作为某个隐藏div的子级附加到dom中,添加事件,然后将div作为内容传递,因为它支持指向节点 或者,您可以使用事件委派 例如
addEvent'submit:relaymap form',函数{};-或者类似的jQuery,例如$document.on'submit',map form',fn非常好-谢谢!我想我更喜欢你的第一个建议,而不是有一个隐藏的div。我不知道divs发送domready事件。我对JavaScript还是很陌生,但我喜欢它。在此期间,有些事情可能发生了变化。这对我来说是可行的,但前提是document.id被document.getElementById替换,addEvent被addEventListener替换。这是因为最初的答案是关于MooTools的。太好了。非常感谢你。这正是我一直难以解决的问题。@dev_khan他们移动了它。-内容才是最重要的
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);