父页面显示数据信息,怎样在打开的新窗口中添加完数据后,不用刷新就将数据添加到父页面了?

homel 2009-10-17 06:04:10
rt:
比如说A页面时显示所有信息的,有一个链接”新建“,点击后弹出添加页面B,怎么将添加后的数据直接显示到父页面A页面中?
我使用的是在B页面中使用:response.write("<script>alert('ADD record Complete');opener.location.reload();window.close();</script>")的方法,但是每次都要刷新
如果不刷新,就要使用Ajax,具体的思路需要使用到xml,但是对于xml的操作不熟,请大家给点建议,谢谢啦!
...全文
197 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
homel 2009-10-21
  • 打赏
  • 举报
回复
谢谢火星人,
后来我自己是这样写的:
function showbom(bom1,total){
var tb=document.getElementById("bominfo");
var index=tb.rows.length;
var row=tb.insertRow();
row.id="tr"+index;
var cell1=row.insertCell();
cell1.innerText=bom1;
var cell2=row.insertCell();
cell2.innerText=total;
}
测试了也可以用
toury 2009-10-20
  • 打赏
  • 举报
回复
修正一下:
var n=0;/*这个是表格当前的总行数*/
var tbl=null;

window.onload=fuction(){
tbl=null;document.getElementById("bominfo");/*获取数据表格对象并赋值给tbl*/
n=计算出的tbl的行数
}
toury 2009-10-20
  • 打赏
  • 举报
回复
问题我刚看了一下,貌似就是JS插入单元格的问题。看了你11楼的代码,首先应该纠正一下你的思路:
1、既然你要给新加的行和单元格ID,那就应该首先明确出表格当前的总行数n;所以要定义一个JS全局变量n,在window.onload()里完成初始化赋值;而不是用你那个循环里的i,j之类。

2、肯定要增加一新行,这个简单,就是insertRow(x)没错;但是看你在哪一行插入。用x来确定。假设在表格最后一行,那就var myrow=mytable.insertRow(mytable.rows.length);/*有新数据的话,就添加一行到表格末尾*/

3、接下来数数有几个格子,一个一个画格子,按照传入的参数边画边向需要的格子里填充内容;不需要填充的也要填充进去 


<script>
var n=0;/*这个是表格当前的总行数*/
var tbl=document.getElementById("bominfo");/*获取数据表格对象*/

window.onload=fuction(){
n=数据表格tbl的行数
}

function showbom(bom1,total){
n++;/*累加行数*/
myrow=tbl.insertRow(tbl.rows.length); /*有新数据的话,就添加一行到表格末尾*/
myrow.id="row_"+n;
//在这里分解你的参数。
//我这里假设bom1就是第一个格子的:
//开始画格子。假设每行三列:
var o=myrow.insertCell(0);o.innerHTML=bom1; /*画第一个单元格*/
o=newRow.insertCell(1); o.innerHTML=" "; /*画第二个单元格*/
o=newRow.insertCell(2); o.innerHTML=" "; /*画第三个单元格*/
}
</script>

没时间写、测代码,大致敲了几行参考吧。
homel 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lzp4881 的回复:]
document.getElementById("aa").innerHTML=bom1;
改成
document.getElementById("aa").innerHTML=document.getElementById("aa").innerHTML+bom1;

[/Quote]
这样添加时横向将数据排列的,我希望的是纵向的排列
意思是,我在子页面中加一行数据的话,在父页面循环读取的那里就自动创建一行,显示我添加的数据,现在我用下面的代码做,但是不能定位到具体的单元格中,
 function showbom(bom1,total){
var mytable=document.getElementById("bominfo");/*获取我读取数据表格的id*/
for(var i=0;i<=1;i++)
{
var myrow=mytable.insertRow();/*有新数据的话,就添加一行*/
myrow.id="row_"+i;
for(var j=0;j<=1;j++)/*这里是判断这一行中总共的单元格数*/
{
var mycell=myrow.insertCell(); /*给汉中添加单元格*/
mycell.id="cell_" + i + "_" + j;
mycell.innerText = bom1 ;/*这里没有办法定位到我想要的,在第一列中添加我新增的数据,而是所有单元格全部填充了,*/
}
}
//document.getElementById("aa").innerHTML=bom1;

}



请高手再给指点一下迷津,谢谢
  • 打赏
  • 举报
回复
呵呵,非常简单的,不需要循环,记得你以前还问过一个购物车还是什么来的,里面就有一个有新数据就增加一行的,并没有用到循环

其实你的道题和购车那个很类似
ayouori 2009-10-19
  • 打赏
  • 举报
回复
5#可用,直接用window.opener.document.getElementById('')操作打开页面的对像,可以在提交同时关闭子窗口,更有对话框效果.
lzp4881 2009-10-19
  • 打赏
  • 举报
回复
document.getElementById("aa").innerHTML=bom1;
改成
document.getElementById("aa").innerHTML=document.getElementById("aa").innerHTML+bom1;
homel 2009-10-19
  • 打赏
  • 举报
回复
打开的子页面:add_bominfo.asp
<div id="div1" style="width: 100%;" align="center">
<form name="form1" method="post" action="add_bominfo.asp?action=add">
<fieldset class="fieldset">
<legend class="legend">产品工程表头信息</legend>
<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="32%" class="td-center">产品工程资料名称</td>
<td width="68%" class="td-left"><input name="prod_eng_name_cn" type="text" class="textarea1" style="width:250px;" id="prod_eng_name_cn">
<input name="prod_eng_name_en" type="text" class="textarea2" id="prod_eng_name_en" style="width:250px;"></td>
</tr>
<tr>
<td class="td-center">产品工程资料编码</td>
<td class="td-left"><input name="prod_eng_code" type="text" class="textarea1" id="prod_eng_code"></td>
</tr>
<tr>
<td class="td-center">产品名称</td>
<td class="td-left"><input name="frmchangshang" class="txtBoxStyle2" id="frmchangshang" style="width:350px;" onBlur="DisSelect();" onKeyUp="findNames();" size="50" maxlength="100">
<div style="position:absolute;top:0;left:0;" id="popup">
<table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0">
<tbody id="name_table_body"></tbody>
</table>
</div></td></tr>
<tr>
<td class="td-center">创建人</td>
<td class="td-left"><input name="prod_eng_code" type="text" id="prod_eng_code"></td>
</tr>
<tr>
<td> </td>
<td><input name="Submit" type="submit" class="btn_2k3" value="提交"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
</fieldset></form>
</div>
</body>
</html>
<%if request("action")="add" then
itemid=request.form("frmchangshang")
para=split(itemid,">")
needpara=para(1)
sql="insert into eng_product_rawmaterial(materialid)values("&needpara&")"
conn.execute(sql)
if user_default_language=3 then
response.Write("<script>opener.showbom("&needpara&");window.close();</script>")
else
response.Write("<script>opener.showbom("&needpara&");window.close();</script>")
end if
end if%>



谢谢大家了
homel 2009-10-19
  • 打赏
  • 举报
回复
可能我表述的不清楚,因为在父页面A下,嵌套了一个表格,已经循环读取了值,点击“物料参数”连接后,弹出的B页面时要添加新的值,关闭B页面后,父页面A嵌套的表格中的值要显示,还要显示我新添加的值!!!
下面是我写,但是只能记录最新添加的值,请高手给指导一下,谢谢啦!
父页面:
aa.asp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title><%=selectlanguage_Fun(user_default_language,"Product Engineer Informatio","产品工程资料管理")%></title>
<link rel="stylesheet" href ="../css/Common.css" type="text/css">
<link rel="stylesheet" href ="../css/style1.css" type="text/css">
</head>
<body>
<script type="text/javascript" >
function showbom(bom1){
var row,cells
row =document.createElement("tr");
cell =document.createElement("td");
document.getElementById("aa").innerHTML=bom1;
}
function targ(url){
NWin=window.open(url,'check_prod','width=850,height=600,toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, status=no,left=250,top=250');
window.NWin.focus();}
</script>

<div id="div2" style="width: 100%;" align="center">
<form name="form2">
<fieldset class="fieldset">
<legend class="legend">生产工序</legend>
<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="10%" class="td-center">工序名称</td>
<td width="31%" class="td-left"><input name="step_name_cn" type="text" class="textarea1" style="width:250px;" id="step_name_cn"><br><input name="step_name_en" type="text" class="textarea1" style="width:250px;" id="step_name_en">
</td>
<td width="22%" class="td-left">作业站:</td>
<td width="37%" class="td-left">  </td>
</tr>
<tr>
<td class="td-center">人工耗时</td>
<td class="td-left"> </td>
<td class="td-left"> </td>
<td class="td-left"> </td>
</tr>
<tr>
<td class="td-center" onclick ="targ('add_bominfo.asp','blank','width=330,height=200,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no,left=250,top=250','eqipment')" style="cursor: hand;"><b>物料参数</td>
<td colspan="3" class="td-left">
<%sql="select materialid,usedqty from eng_product_rawmaterial"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
%>
<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<%do while not rs.eof%>
<tr >
<td id="aa"><%=rs("materialid")%></td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<%rs.movenext
loop
rs.close
set rs=nothing%>
</table>

</td>
</tr>
<tr>
<td class="td-center">设备参数</td>
<td colspan="3" class="td-left"> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
</fieldset></form>

</div>
<%'end if%>
</body>
</html>
liuwei_IT_love 2009-10-19
  • 打赏
  • 举报
回复
添加完成后自动调转不就可以了,在response.write(" <script>alert('ADD record Complete');opener.location.reload();window.close(); </script>")后面再加一句response.redirect"跳转到父页"这样试试
lzp4881 2009-10-19
  • 打赏
  • 举报
回复
父窗口parent.html:
<html >
<body>
<form id="form1" name="form1" method="post" action="">
<p>
<input type="text" name="textfield" id="textfield" />
</p>
<p> </p>
<p>
<input type="button" name="button1" value="打开" onclick="son=window.open('son.html','son','width=480,height=330,top=150,left=280, toolbar=no, menubar=no, scrollbars=auto, resizable=no, location=no, status=no');button2.disabled=false;" />
</p>
</form>
</body>
</html>


子窗口son.html:
<html>
<body>
<form id="form1" name="form1" method="post" action="">
<input type="text" name="textfield" id="textfield" />
</form>
<input name="" type="button" onclick="window.opener.document.getElementById('textfield').value=form1.textfield.value" value="修改父窗口的值" />
</body>
</html>
homel 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinmo 的回复:]
引用楼主 homel 的回复:
rt:
比如说A页面时显示所有信息的,有一个链接”新建“,点击后弹出添加页面B,怎么将添加后的数据直接显示到父页面A页面中?
我使用的是在B页面中使用:response.write(" <script>alert('ADD  record Complete');opener.location.reload();window.close(); </script>")的方法,但是每次都要刷新
如果不刷新,就要使用Ajax,具体的思路需要使用到xml,但是对于xml的操作不熟,请大家给点建议,谢谢啦!

根本不需要AJAX吧,记得你以前问的一个问题里就有这个做法了!!
[/Quote]

之前的是你给我讲的将数据直接加到父页面的select 下拉框中的,对了,我可是尝试一下使用那种方法的,谢谢啦!
  • 打赏
  • 举报
回复
[Quote=引用楼主 homel 的回复:]
rt:
比如说A页面时显示所有信息的,有一个链接”新建“,点击后弹出添加页面B,怎么将添加后的数据直接显示到父页面A页面中?
我使用的是在B页面中使用:response.write(" <script>alert('ADD  record Complete');opener.location.reload();window.close(); </script>")的方法,但是每次都要刷新
如果不刷新,就要使用Ajax,具体的思路需要使用到xml,但是对于xml的操作不熟,请大家给点建议,谢谢啦!
[/Quote]
根本不需要AJAX吧,记得你以前问的一个问题里就有这个做法了!!
BeenZ 2009-10-17
  • 打赏
  • 举报
回复
直接在B页面中操作父页面的DOM元素进行添加比如parent.getElementById("xx").innerHTML=XX

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧