通过JavaScript更改父窗口onclick Value from Child Window

时间:2009-08-18 13:03:24

标签: javascript html dom asp-classic

设定:

我正在通过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)

问题:

当我尝试更改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)

然后在窗口关闭后单击按钮我在FF中出现错误,IE中没有任何反应:

  未被捕的例外:[例外......   “组件返回失败代码:   0x80004005(NS_ERROR_FAILURE)   [nsIDOMWindowInternal.alert]”   nsresult:“0x80004005   (NS_ERROR_FAILURE)“位置:”JS   frame ::   /timer/activity_proc.asp?a=start ::   anonymous :: line 8“data:no]

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

1 个答案:

答案 0 :(得分:1)

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

有一种在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)