Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在弹出窗口刷新后从父窗口访问弹出DOM?_Javascript - Fatal编程技术网

Javascript 如何在弹出窗口刷新后从父窗口访问弹出DOM?

Javascript 如何在弹出窗口刷新后从父窗口访问弹出DOM?,javascript,Javascript,我有一个打开弹出窗口的父页面 我可以从父级访问弹出窗口的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.doc

我有一个打开弹出窗口的父页面

我可以从父级访问弹出窗口的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");
    })
});
在弹出窗口刷新之前,一切正常:/


有什么想法吗?

正如Burki之前在评论中所说的那样,当您的弹出窗口重新加载时,myButton对象将被重新创建,您之前添加的eventListener将不再向他发送

您最好的选择可能是将eventListener代码移动(如果可能的话)到popup.html页面,因为它将在每次重新加载popup时执行

也许使用jQuery的.on()方法绑定两个EventListener也会有所帮助,尽管我不能100%确定这一点


检查当弹出窗口重新加载时,页面中的加载事件代码是否触发。正如Burki之前在评论中所述,您遇到的问题是,当弹出窗口重新加载时,myButton对象将被重新创建,您之前添加的eventListener将不再与他关联

您最好的选择可能是将eventListener代码移动(如果可能的话)到popup.html页面,因为它将在每次重新加载popup时执行

也许使用jQuery的.on()方法绑定两个EventListener也会有所帮助,尽管我不能100%确定这一点


检查当弹出窗口重新加载时页面中的加载事件代码是否触发

如果您愿意使用jQuery,那么
on()
函数将帮助您:您面临的问题(如果我理解正确)是您正在访问一个以前不存在的对象(因为它只是在重新加载后创建的)。不过,我现在不能帮你玩JS。弹出窗口是如何刷新的?是直接从弹出窗口还是父窗口?弹出窗口本身刷新(不幸的是,这是一个很难更改的遗留代码),如果您愿意使用jQuery,那么
on()
函数将帮助您:您面临的问题(如果我理解正确的话)是指您正在访问以前不存在的对象(因为它仅在重新加载后创建)。不过,我现在不能帮你玩JS。弹出窗口是如何刷新的?是直接从弹出窗口还是父窗口?弹出窗口本身刷新(不幸的是,这是一个很难更改的遗留代码),我认为加载也不会触发,因为这样它只会找到新按钮并再次附加事件。@AtheistP3ace,你是对的,加载事件不会在父页面中第二次激发。目前我已经按照Bardo的建议在弹出窗口中移动了我的代码,但我不喜欢这个解决方案,因为弹出窗口是在其他地方使用的。我也不认为加载正在触发,因为这样它只会找到新按钮并再次附加事件。@AtheistP3ace,您是对的,加载事件不会在父页面中第二次触发。目前我已经按照Bardo的建议在弹出窗口中移动了我的代码,但是我不喜欢这个解决方案,因为弹出窗口是在其他地方使用的。