2009-08-18 104 views
0

设置:更改父窗口的onclick值在子窗口通过JavaScript

我打开通过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 帧:: /timer/activity_proc.asp?a=start :: anonymous :: line 8“data:no]

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

回答

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) 
+0

谢谢主席先生,完美的作品。 – Dzejms 2009-08-18 14:42:27