gpt4 book ai didi

javascript - 将事件添加到 Google Maps API InfoWindow 内的元素

转载 作者:行者123 更新时间:2023-12-02 23:25:31 25 4
gpt4 key购买 nike

我想在 Google Maps API (v3) InfoWindow 内放置一个带有输入字段和提交按钮的表单。

提交后,我想调用一个函数,该函数使用输入字段中输入的地址启动路线服务。

这是我的代码(我目前仅测试是否触发了 Directions 事件。我已经编写了完整的 getDirections() 事件,并且可以确认它是否有效并在正确触发时返回方向) :

我尝试使用 MooTools 添加事件监听器,如下所示:

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-form")); 它正确输出了表单元素,但事件没有触发。

我已将相同的事件添加到 DOM 中的另一个表单(具有不同的 ID),并且工作正常。

那么,如果 MooTools 可以找到该元素并添加事件监听器,那么是什么阻止了该事件的触发呢?这是范围问题吗?

最佳答案

这看起来不像是范围问题。 getDirections 处于同一范围内。

这是一个鸡蛋与鸡肉的案例。最终 - 你的 html 字符串不在 DOM 中,所以你还不能向其中添加事件或引用其中的元素。信息窗口稍微异步,因此您需要确保附加了内容 div。或者,您需要使用事件委托(delegate)。

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

或者,您可以使用事件委托(delegate)

例如。

topnode.addEvent('submit:relay(#map-form)', function(e){ }); - 或等效的 jQuery,例如 $(document)。 on('提交', '#map-form', fn)

关于javascript - 将事件添加到 Google Maps API InfoWindow 内的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com