2016-11-28 92 views
-3

我有一个页面,前进按钮,后退按钮和一个Google地图。当点击前进或后退按钮,我不重新加载页面,我只是改变了以下标签内的HTML,是否有替代document.getElementById来访问动态生成的元素?

<div id="content"></div> 

如果地图是可用的,里面的“内容”的div会,

<div id="map" class="map"></div> 

谷歌可以让我与

var map = new google.maps.Map(document.getElementById('map') ... 

这工作得很好,第一次加载页面访问地图,但是当我改变“内容”动态,除非我重装它不会加载地图 这一页。我试着用相同的结果将它改为document.querySelector()。

我知道,对于某些功能,如使用按钮我可以使用访问它们,

$('body').on('change', 'div.button', function()... 

是否有访问的方式/修改动态创建的元素,是不是一个按钮?

+0

您是否在更改内容后在新元素上实例化新的Map对象?请张贴足够的代码让我们重现问题。 – Bergi

回答

2

创建地图的新实例的代码可能只运行一次。在更新#content div之后,您需要再次运行代码以实例化新地图(并且理想情况下销毁先前的地图)。

如何动态更新内容?例如,如果您使用的是jQuery.get(),则可以提供在内容更新后运行的回调函数。这是你想要加载地图的地方。

+0

非常感谢,你绝对正确。完全忘记了我必须先创建新地图才能访问它。我可能不得不问一个新问题,因为Google使用来访问地图。通常我会在函数中包装某些东西,然后调用该函数,但我不知道如何在脚本中启动某些东西。 – Mike

0

jQuery在加载DOM时将事件绑定到元素。如果要将事件绑定到动态生成的HTML,则需要重新初始化事件或在未动态加载的父元素上使用event delegation。您用于jQuery.on()的示例是正确的,但如果您想要定位除按钮之外的其他东西,只需将div.button更改为任何其他选择器即可。例如:

$('#parent-div').on('event', '.selector', function() { 
    // do something 
}); 

这实际上绑定事件#parent-div,但是当.selector触发事件只监听。