【问题标题】:Change Parent Window onclick Value From Child Window Via JavaScript通过 JavaScript 从子窗口更改父窗口 onclick 值
【发布时间】:2010-11-20 14:10:32
【问题描述】:

设置:

我正在通过 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 :: 匿名 :: 第 8 行”数据:无]

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

【问题讨论】:

    标签: javascript html dom asp-classic


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      相关资源
      最近更新 更多