下面是运用Struts标签的jsp界面:
<html>
  <head>
<script type="text/javascript">
function rptComp(){
var chk= document.getElementsByName("chk");
var flag = false;
var count=0;
         var j = 0;
for(var i=0; i<chk.length ; i++) {
if(chk[i].checked) {
            j=i;
            flag=true;
count++;
}
}
if (count == 0) {
Ext.Msg.alert("提示","请选择要审核的报告!");
return;
}
if (count > 1) {
Ext.Msg.alert("提示","一次只能审核一个报告!");
return;
}   // var s=document.getElementById("status");
//alert(s.value);
                 //alert(s.innerText); //if(s.innerText=="已审"){
      //alert("提示","该报告已审,无需重新审核!");
} */
           }
</script>
</head>
<body>
    <div id="now_title"><img src="../images/Title_btn.png" />&nbsp;报告管理&gt;&gt;<span class="light_orange">报告列表</span></div>
    <div id="frame_toolbar">
<ul>
    <li class="ftp_border">
<span class="ftp_text" onmousedown="rptNew();"><img src="../images/ico/icon031a1.gif" border="0">新建</span>
</li>
<li class="ftp_border">
<span class="ftp_text" onmousedown="rptDelete();"><img src="../images/ico/icon031a4.gif" border="0">删除</span>
</li>
<li class="ftp_border">
<span class="ftp_text" onmousedown="rptSort();"><img src="../images/ico/icon031a5.gif" border="0">排序</span>
</li>
<li class="ftp_border">
<span class="ftp_text" onmousedown="rptComp();"><img src="../images/ico/icon031a6.gif" border="0">审核</span>
</li>
</ul>
</div>
    <s:form  id="rptform" method="post">
    <table class="cTable table tCenter" id="content">
     <tr class="cTitle toolbar_bg">
     <td width="5%"><div>序号</div></td>
     <td width="15%"><span class="split ctSplit"></span><div>报告名称</div></td>
     <td width="10%"><span class="split ctSplit"></span><div>报告年度</div></td>
     <td width="10%"><span class="split ctSplit"></span><div>报告期间</div></td>
     <td width="10%"><span class="split ctSplit"></span><div>披露时间</div></td>
     <td width="15%"><span class="split ctSplit"></span><div>状态</div></td>
         </tr>
     <s:iterator value="#rptManager.pageReport.objectList" id="rpts" status="rpt">
     <tr>
     <td width="5%"><div align="center"><s:property value="#rpt.Index+1" /></div></td>
     <td width="15%"><div align="center"><s:property value="#rpts.rptName" /></div></td>
     <td width="10%"><div align="center"><s:property value="#rpts.rptYear" /></div></td>
     <td width="10%"><div align="center"><s:property value="#rpts.rptPeriod" /></div></td>
     <td width="10%"><div align="center"><s:property value="#rpts.rptTime" /></div></td>
     <td width="15%"><div align="center"><s:property value="#rpts.status" /></div></td>
     <td width="15%">
     <input type="checkbox" name="chk" value='<s:property value="#rpts.id" />'/>
     </td>
     </tr>
     </s:iterator>
    </table>
    </s:form>
</body>我想实现的是在选中某条记录时,如何用js获得相应记录中“状态”这个字段里的值?  我原来的做法是在"><div align="center"><s:property value="#rpts.status" /></div>;里设一个id="status",然后在js中用getElementById,获得它的值,但是不管点哪条记录,输出的都是第一条记录中“状态”里面的值,所以这里不知道为什么,请哪位高手指点一下,谢谢!
另外,如果有哪位高手可以用js实现那个“排序”功能的,也请指教一下,就是不通过后台处理,直接在页面上js控制Struts分页重新排序,比如按“报告时间”,按“序号”等不同字段排序。

解决方案 »

  1.   

    htmlxgrid控件可直接点击表头列名排序,看看
      

  2.   

    感谢1楼的朋友,但是我这里不是要用到htmlxgrid控件,我这里是要用一个“排序”按钮实现,点击弹出让你选择按什么字段排序,然后下面的记录重新排序。
      

  3.   

    table设个id,然后js可以定位到每个td的。tr有id,td有innerText还是innerHtml忘了,反正里面的可以取到。排序用按钮实现,不经过后台,那排序的只能是当前页面。你可以先js取得那一列的td所在的格子,然后排序后重新write整个table,做起来很麻烦,还不如去下个。
      

  4.   


    首先感谢4楼的朋友。
    那我如何取到“状态"这个td里面的值呢?还有你说的“table设个id,然后js可以定位到每个td的”关键是该如何定位那个id,这个我不会,请指教一下!  谢谢
      

  5.   

    你不用框架的话,这个js写起来就太麻烦了。
    要是用jQuery的话,其实就是几句话的事情。
      

  6.   

    这里排序思路也不是很明确,我的意思是想通过js控制Struts2分页重新排序,如我触发了“序号”字段排序,页面可以重新排序,按序号的升序或降序排列。
    另外,上面那个js取“状态”中的值,有哪位可以帮忙解决的,请指教一下! 我遇到的问题是取不到某一个记录中那“状态”字段里的值。
      

  7.   

    如果是通过服务器排序的话,那应该是在title上设置一个link。点击title的时候按照这一列来排序。
    要取得状态字段的值,如果你有设置hidden的话,直接通过id取就行。
    要是没有设置hidden,只能根据dom对象取得某个td里的html内容了。
      

  8.   

    我原来的做法是在<div align="center" id="sts"> <s:property value="#rpts.status" /> </div>;里设一个id="sts",然后在js中用getElementById,获得它的值,但是点下面哪条记录,输出的都是第一条记录中“状态”里面的那个值,所以这里没办法取到某条记录中“状态”的值。不知道是为什么? 有什么方法? 
      

  9.   

    // var s=document.getElementById("status"); 
    //alert(s.value); 
    //alert(s.innerText); 
    用这种方法肯定不得不到撒,因为<td width="15%"> <div align="center"> <s:property value="#rpts.status" /> </div> </td>这样写每个id都是status,怎么取?
    你可以把<input type="checkbox" name="chk" value=' <s:property value="#rpts.id" />'/> 
    写成<input type="checkbox" name="chk" value=' <s:property value="#rpts.status" />'/> 
    得到这个checkbox的value不就OK了
      

  10.   

    不懂楼上朋友的意思? 
    <input type="checkbox" name="chk" value=' <s:property value="#rpts.status" />'/> 
    如果改成上面那个,那岂不是取不到"#rpts.id" 的值? 而"#rpts.id"也是有用处的。
    我要实现的就是点中某条记录,然后取那条记录中“状态”字段里面的值
      

  11.   

    你用:
    <div align="center" id="sts"> <s:property value="#rpts.status" /> </div>
    这样的话,只能在页面上生成一个html文本,最后的Html是这样:
    <td><div align="center" id="sts">your_value</div></td>
    而不是一个input项。所以它是没有值的。
    而且,你的这个id="sts"每行都一样,所以最后你得到的是id="sts"的第一个object。也就是你说的那个title。
    我上面已经说过了,你要么生成一个hidden项。要么用取html文本的方式。
    个人推荐,去下一个jQuery框架,用取html文本的方式。
    如果要用原生js解决,真的不太好写。换了浏览器还可能有bug。
      

  12.   

    首先很感谢楼上的这位大哥的帮忙,我不知道你说如果用设hidden项的方法如何实现,能否具体说明一下,十分感谢! 你说的用jQuery框架 ,由于项目规定,是不允许额外再用别的框架的。而且也不熟悉jQuery框架。
      

  13.   

    <input type="hidden" id="rpts_status_<s:property value='#rpt.index'/>" value="<s:property value='#rpts.status'/>"/>把这个加在td里面,你的页面每行就多了一个hidden项。id分别是:
    rpts_status_0,rpts_status_1,rpts_status_2……
    然后你用:
    var s=document.getElementById("rpts_status_0").value;
    取得的是第一行的status。依次类推。
      

  14.   

    排序 可以在sql语句里面实现啊。 
      

  15.   

    参考 JavaScript排序http://www.javaeye.com/topic/103272
      

  16.   

    按照朋友上面是说法,加上去了   提示document.getElementById("rpts_status_0").value is null值,还是为空值。 id="rpts_status_ <s:property value='#rpt.index'/>"  我在想是否此id有误??
      

  17.   


    按照朋友上面是说法,加上去了  提示document.getElementById("rpts_status_0").value is null值,还是为空值。 id="rpts_status_ <s:property value='#rpt.index'/>"  我在想是否此id有误??
      

  18.   

    你可看一下html源码中的id是否有误。
    这个代码我测试过的,在我这里是没有问题的。
    document.getElementById("rpts_status_0").value
    这个js我没有测试过。
      

  19.   

    辛苦了  楼上这位大哥,谢谢你多日来的帮助。
    这里的id我是按你教的方法 id="rpts_status_<s:property value='#rpt.index'/>"  这样设的,但是在js里会报出document.getElementById("rpts_status_0")这个取值为空。也就是没取到那个id了。所以我是在想那个id设可能有问题。id="rpts_status_<s:property value='#rpt.Index+1'/>"也是不行。你说你测试成功过  能否代码贴出来让我看看  你是如何设的  也许是细节问题,  找不出来   十分感谢。
      

  20.   

    没有html源码,就我上面贴的jsp页面,源码就是上面那些,我这里要实现的功能其实很简单,就是要判断取“状态”里的值,取出来判断它是不是“已审”,如果是已审,那就不用审核报告了,如果是未审,那就跳到后台处理审核。  而问题是在js里怎么取到这某条报告记录中“状态”这个字段里的值。取不到就做不了判断,所以搞了半天就是这个取值问题了。
    代码都在上面了,其他的分页代码,新建,编辑,删除功能我上面略掉,没贴出来,但是跟审核功能没关系吧?
      

  21.   

    兄弟,你不知道怎么在浏览器上看源码么?
    用你的浏览器打开你要测试的那个页面,然后在页面上右键->查看源代码。
    如果用FF的话,你可能需要右键->本帧->查看帧源代码。
    你在服务器端确实没写html源码,但是在浏览器上有html啊。其实你不用全贴,只把某一行的状态那个td里的html贴出来就行了。
    无论jsp还是asp,都是不能用js访问的。js访问的html生成的dom对象。把html贴出来一看就一目了然了。
    如果你连这些最基本的调试都不会的话,那我真的没办法帮你了。
      

  22.   

    不好意思啊 ,哥们  我原来没有理解你上面话的意思,以为我写html的   呵呵,通常我也没你那样调试的习惯,一般用FF的firebug直接看。。
      

  23.   

    哥们 ,按照你上面说的调试,我查了源码,的确每个td上分别取到了rpts_status_0,rpts_status_1,rpts_status_2……   也在js中用alert查看的确取到了“状态”中的值,  但是现在有个新问题,这个td里运用input type=hidden, 在页面上显示不出状态里的值了,即访问这个页面了,状态里那一列全没数据了,哥们是否有什么改良的方法,让初始化时页面“状态”里可以显示出数据来。
    另外有什么方法可以任意的取一条记录中的rpts_status_0  ,在js中要得到某条记录的状态值,document.getElementById("?")  dom里面怎么设?
      

  24.   

    <input type="hidden" id="rpts_status_ <s:property value='#rpt.index'/>" value=" <s:property value='#rpts.status'/>"/>
    这个只是作为一个隐藏项放在td里面。
    你以前怎么显示的,现在还怎么显示。
    也就是说,上面那段代码,只是追加到你以前的代码的每行状态td里。
    <td width="15%"> <input type="hidden" id="rpts_status_ <s:property value='#rpt.index'/>" value=" <s:property value='#rpts.status'/>"/><div align="center"> <s:property value="#rpts.status" /> </div> </td> 
      

  25.   

    用你的方法可以拿到的,因为你定义的是id所有用js拿到的是一个数组,要想得到具体的某个循环数组对象就可以了
      

  26.   

    感谢各位连日来的帮忙与关注,特别是bayougeng朋友,由于我是Java EE初学者,所以很多地方还不熟,让你费心了 不好意思, 在这里表示感谢。谢谢你的帮助!
    昨天我把问题解决了,我的做法是改进了一点<td width="15%"><div id="rpts_status_<s:property value='#rpt.index' />" align="center"><s:property value="#rpts.status" /></div></td> 
    然后在js里用for(var i=0; i<chk.length ; i++) {
    if(chk[i].checked) {  
                j=i;
    }
    }
          var s=document.getElementById("rpts_status_"+j); 
            alert(s.innerText);   
    的土办法取值,最后也是可以的,可以随机取到某条状态里的值了。呵呵,也不知道这样做法是否规范正确,感觉有点怪怪的,测试了几次是成功了,那索性先运用了。等哪天突然不行了,再向论坛上各位高手请教。
    在此再次感谢各位的帮助。
      

  27.   

    有对页面重新排序功能有思路的朋友,希望能一起探讨下,就是可能涉及到Struts2重新分页排序吧,我要实现的就是单击“排序”按钮,然后弹出窗口,选择按页面上哪个字段,以及排序方式,然后页面上就重新排序了。不知道这样是否在js中就可以操作了,还是需要经过后台处理。我只是需要考虑各个分页独自的排序一下,不需要全部记录整体排序。