window.opener.document.getElementById不起作用

时间:2010-06-14 16:25:10

标签: asp.net javascript

在我的asp.net网络应用程序中,我创建了一个带按钮的弹出窗口。单击该按钮时,我想设置父窗口中包含的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”;
  4. 只有示例3有效。我读过的所有内容都表明#1是首选的方法,但我似乎无法使其完全正常工作。有没有人有任何想法我做错了什么?

    我在Firefox,Chrome和IE中试过这个。

    由于

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

在调用弹出代码时需要更改一下,你必须传递文本框客户端ID,然后你可以从弹出页面设置它的值而无需任何硬编码。 这是方法:

var txtNameClientObject = '<%= txtName.ClientID %>';
window.open('Child.aspx?txtName='+txtNameClientObject);

然后在弹出页面中,您可以将其作为

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

希望这对你有所帮助。

谢谢