日期:2014-05-20  浏览次数:20455 次

100 分!!用 window.open 打开子窗口,点击子窗口上的按钮,如何把子窗口的数据传回到父窗口?
前提是父窗口的text框在DataGrid的模板列里.

下面的语句在非模板的text框中正常
window.opener.document.forms[0].txtCompanyName.value   =   ID;

我又尝试用下面的语句,报找不到对象
window.opener.document.getElementById( 'txtCompanyName ').value=ID;

------解决方案--------------------
检测设置了ID属性了吗?

然后,window.parent.document.getElementById( 'textCompanyName ').value = ID;
------解决方案--------------------
window.open()这样写:
window.open( "xx.aspx?id= <%=textCompanyName.ClientID%> ")

最好写个函数,多次调用

function w(sID)
{
window.open( "xx.aspx?id= " + sID)
}

这样,你就可以这样传递
in xx.aspx

<script>
var sid = " <%=Request.QueryString[ "sID "]%> "
</script>

传递

window.opener.document.getElementById(sid).value = "xxxxxxxx ";

再次提醒:
模板列中的 textCompanyName的id是变化的,不能按照你原来的方法作


------解决方案--------------------
由于是模板,可能一个页面有许多textbox,你 要清楚传递到哪个

你应当在绑定事件里,输出text 'txtCompanyName '.ClientID

道理就是这样的,具体运用看你的使用需求,灵活运用
------解决方案--------------------
在DataGrid中的 textbox的Id实际上
在.net 输出成html代码的时候 是被 添加后缀已保证 唯一的
以为你给datagrid里面的text定义id的时候实际只定义了一个
但是datagrid输出的数据 则很可能是很多条数据
由于html页面中的 id必须唯一 所以datagrid为它添加了后缀 已区别..

你那样找 当然 那个id是不存在的了..
你可以看输出后的html 看它添加了什么 用新的ID即可