window.opener.document.getElementById 不起作用

Cur*_*tis 1 javascript asp.net

在我的 asp.net Web 应用程序中,我创建了一个带有按钮的弹出窗口。单击该按钮时,我想设置父窗口中包含的 asp:TextBox (id=TextBox1) 的值。然而,它并不像我读过的所有例子所表明的那样工作。

我在我的 javascript onclick 处理程序中尝试了以下代码行:

  1. window.opener.document.getElementById('<%= TextBox1.ClientID %>').value = "abc";
  2. window.opener.document.getElementById("TextBox1").value = "abc";
  3. window.opener.document.getElementById("ctl00_ContentPlaceHolder1_TextBox1").value = "abc";

只有示例 3 有效。我读过的所有内容都表明 #1 是首选方法,但我似乎根本无法使其工作。有没有人知道我做错了什么?

我已经在 Firefox、Chrome 和 IE 中尝试过这个。

谢谢

小智 6

您需要在调用弹出代码时稍作更改,您必须传递您的文本框客户端 ID,然后您可以在没有任何硬编码的情况下从弹出页面设置其值。这是方法:

var txtNameClientObject = '<%= txtName.ClientID %>';
window.open('Child.aspx?txtName='+txtNameClientObject);
Run Code Online (Sandbox Code Playgroud)

然后在弹出页面中你可以这样做

opener.document.getElementById('<%= Request["txtName"] %>').value = 'from child';
Run Code Online (Sandbox Code Playgroud)

希望这对你有帮助。

谢谢


joe*_*elt 5

这行 JavaScript 是否包含在弹出窗口本身的标记中?如果是这样,则服务器端代码将不会知道 TextBox1 存在于父窗口的服务器端代码中,并且无法确定其 ClientID 属性。您要么需要以某种方式将该客户端 ID 传递到弹出窗口(查询字符串、cookie、会话等),要么对其进行硬编码。或者,您可以将这行 JavaScript 放在父页面上的函数中,然后沿着 window.opener.functionName() 的行调用一些东西。