2015-11-18 174 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的建议在弹出窗口中移动我的代码,但我不喜欢这个解决方案,因为弹出窗口在其他地方使用。 –

相关问题