2016-11-28 83 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觸發事件只監聽。