Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.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从子窗口更改父窗口onclick值_Javascript_Html_Dom_Asp Classic - Fatal编程技术网

通过JavaScript从子窗口更改父窗口onclick值

通过JavaScript从子窗口更改父窗口onclick值,javascript,html,dom,asp-classic,Javascript,Html,Dom,Asp Classic,设置: 我正在通过js打开一个新窗口,这是一个带有一个表单的经典asp页面(是的,经典asp,我知道)。该表单发布到一个处理页面,在该页面上我Response.Write()使用一些内联js来操作父页面上的表单元素 .Write ("<script language=""javascript"">" & vbcrlf) .Write ("var stopButton = opener.document.getElementById(""timerStop"");" &

设置:

我正在通过js打开一个新窗口,这是一个带有一个表单的经典asp页面(是的,经典asp,我知道)。该表单发布到一个处理页面,在该页面上我Response.Write()使用一些内联js来操作父页面上的表单元素

.Write ("<script language=""javascript"">" & vbcrlf)    
.Write ("var stopButton = opener.document.getElementById(""timerStop"");" & vbcrlf)
.Write ("stopButton.style.display = ""inline"";" & vbcrlf)
.Write ("window.close();" & vbcrlf)
.Write ("</script>" & vbcrlf)
.Write(“&vbcrlf”)
.Write(“var stopButton=opener.document.getElementById(“'timerStop”“);”&vbcrlf)
.Write(“stopButton.style.display=”“inline”“;”&vbcrlf)
.Write(“window.close();”&vbcrlf)
.Write(“&vbcrlf)
问题:

当我尝试更改stopButton元素的onclick值时,上述所有操作都很好:

.Write ("<script language=""javascript"">" & vbcrlf)
.Write ("var stopButton = opener.document.getElementById(""timerStop"");" & vbcrlf)
.Write ("stopButton.style.display = ""inline"";" & vbcrlf)
**.Write ("stopButton.onclick = function () {alert(""test"");};" & vbcrlf)**
.Write ("window.close();" & vbcrlf)
.Write ("</script>" & vbcrlf)
.Write(“&vbcrlf”)
.Write(“var stopButton=opener.document.getElementById(“'timerStop”“);”&vbcrlf)
.Write(“stopButton.style.display=”“inline”“;”&vbcrlf)
**.Write(“stopButton.onclick=function(){alert(“'test”“);};”&vbcrlf)**
.Write(“window.close();”&vbcrlf)
.Write(“&vbcrlf)
然后在窗口关闭后单击按钮,我在FF中得到一个错误,IE中没有发生任何事情:

未捕获异常:[异常。。。 “组件返回故障代码: 0x80004005(NS\U错误\U故障) [nsIDOMWindowInternal.alert]“ nsresult:“0x80004005 (NS_错误_失败)“位置:”JS 帧:: /计时器/activity\u proc.asp?a=start:: 匿名::第8行“数据:否]


这是因为子窗口不再存在吗?我应该注意,在我尝试更改按钮的值之前,按钮确实有一个onclick值。

我认为这是因为子窗口不再存在

有一种在javascript中创建函数的方法称为闭包。本质上,函数“属于”或“存储”在其声明的内容中。在本例中,在子窗口上

如果您有一个在父窗口上执行工作的函数,并调用它而不是直接赋值,那么它应该可以工作。即:

在父文档上:

assignStopButtonListener = function(){
    var stopButton = document.getElementById(""timerStop"");
    stopButton.style.display = "inline";
    stopButton.onclick = function () {alert("test");};
}
在弹出文档上

.Write ("<script language=""javascript"">" & vbcrlf)
.Write ("opener.assignStopButtonListener();" & vbcrlf)
.Write ("</script>" & vbcrlf)
.Write(“&vbcrlf”)
.Write(“opener.assignStopButtonListener();”&vbcrlf)
.Write(“&vbcrlf)