2009-08-18 53 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

相關問題