﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Studying Java......-随笔分类-其它</title><link>http://www.blogjava.net/dechon/category/5206.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:57:23 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:57:23 GMT</pubDate><ttl>60</ttl><item><title>不刷新页面,切换表格的编辑状态</title><link>http://www.blogjava.net/dechon/archive/2005/12/08/22957.html</link><dc:creator>Terence</dc:creator><author>Terence</author><pubDate>Thu, 08 Dec 2005 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/dechon/archive/2005/12/08/22957.html</guid><wfw:comment>http://www.blogjava.net/dechon/comments/22957.html</wfw:comment><comments>http://www.blogjava.net/dechon/archive/2005/12/08/22957.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dechon/comments/commentRss/22957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dechon/services/trackbacks/22957.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前段时间做了一个简单的维护界面,包括添加,变更与删除的功能.变更界面是在页面中显示一个TABLE(第一列为RadioButton),选中一行后该行变成可编辑状态,切换到其它行后再恢复成文本显示.最初做的时候是点击单选项按钮后提交到后台刷新页面来实现的,后来要求改成在客户端切换编辑状态.<BR><BR><BR>1.首先需要解决的是由文本显示状态与TEXT框转换的问题.由文本显示到编辑框这个可以通过修改对应对象的innerHTML来解决,由编辑框切换到文本显示开始用的是outerHTML来修改的(后来发现有问题).<BR><BR><BR>2.行切换的问题:当选择的行做了变换时,如果数据做了更改且未提交的话仍显示未修改前的值.这个在页面中加入了一个隐藏域,保存选中行的数据.这部分数据只是用来临时保存数据的,不需要提交到后台,未包含在FORM中,只是给了一个ID进行区分;<BR><BR><BR>3.选中的行并不是所有字段都更改为可编辑状态,只有部分字段需要更改.这里在修改innerHTML的时候进行了判断;<BR><BR><BR>4.如何与FORM中的属性匹配的问题:可以在修改innerHTML的时候指定name就可以了;<BR><BR><BR>5.后来在接下来的测试中,如果字段中存在HTML字符,通过outerHTML来赋值,浏览器会对它进行解析,并不是想要显示的信息.开始查JS函数的时候发现了escape与 unescape,以为会进行自动转换的,后来发现并非如此.在经过几番修改之后,发现修改outerText属性则不会对赋的值进行解析.<BR><BR><BR>6.由于一些验证是定义在后台的,只有提交到服务器后才会进行校验.如果检验不通过还返回当前页面,要保留提交前的状态;这里是给RadioButton一个ID(后台数据表中的主键值).找到对应的行,再把把它置成选中状态,同时相应的列改为编辑框;<BR><BR><BR>7.应该说到这里基本已经完成了,但在提交到服务器校验出错后,返回的页面中显示的仍然是编辑前的值,由于页面做了刷新,隐藏域的值已经被重置.如果再切换到其它行,显示的仍然是用户修改后的数据,这部分数据并未成功更新到后台,应该显示成修改前的数据.这里通过Request传回到页面中,在触发对应的RadioButton后再把值赋到隐藏域中.<BR><BR>部分代码如下:<BR><BR><FONT style="BACKGROUND-COLOR: #ffffff" color=#008000>&lt;script language="JavaScript" type="text/javascript"&gt;</FONT><BR>//Get parent node.<BR><FONT color=#a52a2a>window.SearchByTagName = function(e, TAG) {<BR>&nbsp;&nbsp;&nbsp; while(e!=null &amp;&amp; e.tagName){<BR>&nbsp;&nbsp;&nbsp; &nbsp;if(e.tagName==TAG.toUpperCase()) {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;return(e);<BR>&nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp; &nbsp;e = e.parentNode; <BR>&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; return null;<BR>}</FONT></P>
<P>var&nbsp;<FONT color=#0000ff>selectedRow</FONT> = -1; //global</P>
<P><FONT color=#0000ff>function selectChanged(e) {<BR>&nbsp;&nbsp;&nbsp; var td = SearchByTagName(e, "TD");<BR>&nbsp;&nbsp;&nbsp; var tr = td.parentNode;<BR>&nbsp;&nbsp;&nbsp; var tab = SearchByTagName(tr, "TABLE");<BR>&nbsp;&nbsp;&nbsp; var cellValue = "";<BR>&nbsp;&nbsp;&nbsp; //Reset the cell's value.<BR>&nbsp;&nbsp;&nbsp; if(selectedRow&gt;=0) {<BR>&nbsp;&nbsp;&nbsp; &nbsp;for(var i=td.cellIndex+1; i&lt;tab.rows[selectedRow].cells.length; i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var a = tab.rows[selectedRow].cells[i].getElementsByTagName("INPUT");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var k=0; k&lt;a.length; k++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(a[k].type=="text") {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//Valid only in IE.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;a[k].outerText = document.getElementById(a[k].name).value;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }&nbsp;</FONT>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>&nbsp;selectedRow = tr.rowIndex;<BR>&nbsp;<BR>&nbsp;//Change the cell into text,and save the value into hidden field.<BR>&nbsp;&nbsp;&nbsp; var hyoujijunCell = document.getElementById("hyoujijun" + selectedRow);<BR>&nbsp;&nbsp;&nbsp; var ryakusyouCell = document.getElementById("ryakusyou" + selectedRow);<BR>&nbsp;&nbsp;&nbsp; var nameCell = document.getElementById("name" + selectedRow);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; document.getElementById("hyoujijun").value=rtrim(hyoujijunCell.innerText);<BR>&nbsp;&nbsp;&nbsp; document.getElementById("hyoujijun" + selectedRow).innerHTML = <BR>&nbsp;&nbsp;&nbsp; &nbsp;"&lt;input type='text' name='hyoujijun' maxlength='3' style='width:80px' value='" + <BR>&nbsp;&nbsp;&nbsp; &nbsp; rtrim(hyoujijunCell.innerHTML) +"'&gt;";<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("ryakusyou").value=rtrim(ryakusyouCell.innerText);<BR>&nbsp;&nbsp;&nbsp; &nbsp;document.getElementById("ryakusyou" + selectedRow).innerHTML = <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;"&lt;input type='text' name='ryakusyou' maxlength='4' style='width:60px' value='" + <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;rtrim(ryakusyouCell.innerHTML) +"'&gt;";<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; document.getElementById("name").value= rtrim(nameCell.innerText);<BR>&nbsp;&nbsp;&nbsp; document.getElementById("name" + selectedRow).innerHTML = <BR>&nbsp;&nbsp;&nbsp; &nbsp;"&lt;input name='name' maxlength='100' style='width:300px' value='" + <BR>&nbsp;&nbsp;&nbsp; &nbsp;rtrim(nameCell.innerHTML) +"'&gt;";<BR>}</FONT></P>
<P><FONT color=#a52a2a>function validReturn() {<BR>&nbsp;if ( &lt;%=selectedMasterID%&gt; &gt; 0) {<BR>&nbsp;&nbsp;//Get the selected row,and select it.<BR>&nbsp;&nbsp;var radioSn = document.getElementById("masterid&lt;%=selectedMasterID%&gt;");<BR>&nbsp;&nbsp;radioSn.click( );<BR>&nbsp;&nbsp;//Save original value.If changed other row,restore data as before modified.<BR>&nbsp;&nbsp;document.getElementById("hyoujijun").value = "&lt;%=hyoujijunReturn%&gt;";<BR>&nbsp;&nbsp;document.getElementById("name").value = "&lt;%=nameReturn%&gt;";<BR>&nbsp;&nbsp;document.getElementById("ryakusyou").value = "&lt;%=ryakusyouReturn%&gt;";<BR>&nbsp;}<BR>}</FONT></P>
<P><FONT color=#0000ff>//Clear the last blank.<BR>function rtrim(cellValue) {<BR>&nbsp;if (cellValue.lastIndexOf(" ") &gt;= 0) {<BR>&nbsp;&nbsp;cellValue = cellValue.substr(0,cellValue.lastIndexOf(" "));<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;return cellValue;&nbsp;<BR>}<BR></FONT><FONT color=#006400>&lt;/script&gt;</FONT><BR><BR><BR>&lt;body class="gyomu" onload="validReturn()"&gt;<BR>&lt;table&gt;<BR>&nbsp;&nbsp;&lt;logic:present name="masterList"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;logic:iterate id="element" indexId="index" name="masterList"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td class="meisai" style="width: 50px"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:notEqual name="element" property="sakujyo" value="DELETE"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#006400>&lt;input type="radio" name="masterid"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value="&lt;bean:write name='element' property='masterid'/&gt;"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onclick="selectChanged(this)" id="masterid&lt;bean:write name='element' property='masterid'/&gt;" /&gt;<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%rowCount++;%&gt;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:notEqual&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#006400>&nbsp;&lt;td class="meisai" style="width: 80px" id="hyoujijun&lt;%=index%&gt;"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="element" property="hyoujijun" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#800080>&lt;td class="meisai" style="width: 60px" id="cd&lt;%=index%&gt;"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="element" property="cd" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>&lt;td class="meisai" style="width: 300px" id="name&lt;%=index%&gt;"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="element" property="name" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#000080>&lt;logic:equal name="needShortName" value="true"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td class="meisai" style="width: 60px" id="ryakusyou&lt;%=index%&gt;"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="element" property="ryakusyou" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:equal&gt;<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>&lt;td class="meisai" style="width: 70px" id="sakujyo&lt;%=index%&gt;"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="element" property="sakujyo" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/logic:iterate&gt;<BR>&nbsp;&nbsp;&lt;/logic:present&gt;<BR>&nbsp;&lt;/table&gt;<BR>&lt;/body&gt;<BR></P><img src ="http://www.blogjava.net/dechon/aggbug/22957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dechon/" target="_blank">Terence</a> 2005-12-08 11:46 <a href="http://www.blogjava.net/dechon/archive/2005/12/08/22957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于贴出了第一篇文章</title><link>http://www.blogjava.net/dechon/archive/2005/11/24/21234.html</link><dc:creator>Terence</dc:creator><author>Terence</author><pubDate>Thu, 24 Nov 2005 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/dechon/archive/2005/11/24/21234.html</guid><wfw:comment>http://www.blogjava.net/dechon/comments/21234.html</wfw:comment><comments>http://www.blogjava.net/dechon/archive/2005/11/24/21234.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dechon/comments/commentRss/21234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dechon/services/trackbacks/21234.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说是贴的第一篇,其实并不完全准确,文章前几天就贴上了,但开始的时候放在了"文章"栏目下面而不是随笔下面,首页中显示不出来,反复修改"选项"的设置也没有搞定.在BLOGJAVA上面也没有找到相关的使用说明,郁闷了好一段时间.有点想到其它地方申请个BLOG的想法了.早上的时候看别人的BLOG,发现都是随笔,猜测可能是只有随笔才会在自己BLOG的首页中显示出来.于是把必到"文章"栏目中的一篇文章搬到了随笔下,果然显示在首页了!<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果有遇到同样问题的朋友,请把文章转贴到"随笔"栏目中就可以了!<img src ="http://www.blogjava.net/dechon/aggbug/21234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dechon/" target="_blank">Terence</a> 2005-11-24 10:29 <a href="http://www.blogjava.net/dechon/archive/2005/11/24/21234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>