2015-11-18 223 views
1

我有一個父頁打開一個彈出。如何在彈出窗口刷新後從父窗口訪問彈出的DOM?

我可以從父級訪問彈出窗口的DOM,但是在彈出窗口刷新本身之後,我無法再訪問它(未收到按鈕上的點擊事件)。

樣品我的代碼:

var popup = window.open('http://d.com/popup.html', 'my_popup', 'width=1200px, height=800px'); 
popup.window.addEventListener('load', function(){ 
    var myButton = popup.window.document.getElementById('myButton'); 
    myButton.addEventListener('click', function(){ 
     console.log("click"); 
    }) 
}); 

一切完美,直到彈出有刷新自己:/

任何想法?

+0

,如果你願意使用jQuery,那麼'上()'函數會幫助你:你所面臨的問題(如果我正確理解)是您正在訪問之前不存在的對象(因爲它僅在重新加載後創建)。不過,我現在還無法幫助你玩JS。 – Burki

+0

彈出窗口是如何刷新的?它是從彈出窗口直接還是從父窗口? – AtheistP3ace

+0

彈出式刷新本身(不幸的是,它是一個遺留的代碼,它將會變得很複雜) –

回答

0

您遇到的問題是,正如Burki在評論中說過的那樣,當彈出窗口重新加載時,myButton對象被重新創建,並且之前添加的eventListener不再向他致意。

可能您最好的選擇是將eventListener代碼移動到popup.html頁面,因爲每次彈出窗口重新加載時它都會執行。

也許使用jQuery的.on()方法來綁定你的eventListeners也會有所幫助,雖然我並不是100%確定這種情況。

檢查在頁面加載事件代碼射擊時彈出重載

+0

我不認爲負載正在觸發,因爲那麼它只會找到新的按鈕並再次附加事件。 – AtheistP3ace

+0

@ AtheistP3ace,你是對的,加載事件不會在父頁面中第二次觸發。目前,我已經按照Bardo的建議在彈出窗口中移動我的代碼,但我不喜歡這個解決方案,因爲彈出窗口在其他地方使用。 –

相關問題