本帖最后由 shuqin1984 于 2010-09-15 15:51:32 编辑

解决方案 »

  1.   

    当点击回复该留言的时候,得到触发这个事件的对象,然后获得该对象的坐标,你通过计算后,就可以把那个Form定位到触发这个事件的对象之下呀。
      

  2.   

    问题是,采用什么定位呢? 因为留言内容下面原来是空的, 当点击链接时, 将“凭空”出现一个form 表单, 这个表单有可能覆盖掉下面的留言内容。采用怎样的定位,才能使表单定位到相应的位置上,同时,使后面的留言自动地向下挪移呢?
    绝对定位基本是不可能的; 相对定位的话,我先试试,不知道能不能使后面的留言因为表单的出现而自动向下移动。
      

  3.   

    还有一种思路就是, 不使用定位技术, 而是使每个迭代元素都有一个<div id="replyarea[i]", class="replyarea">;每个 <div>元素 与 每个被迭代的元素msg 绑定起来。这样,点击每个msg时,可以在对应的迭代元素相应的<div></div> 自动插入 form 表单。 不过这种思想,如何根据迭代的元素标记实现 <div id="replyarea[i]"> 呢?<div id="replyarea"+"${msg.id}"></div> ? 然后在 js 中  var replyarea = document.getElementById("replyarea" + msgId); 这里 msgId = ${msg.id} 可以通过参数传进来?感觉  CSS 定位还是比较简单, 只要一个 div 元素, 关键是, 如何将 div 定位到相应留言内容的下面,而使后面的留言自动下移(以免生成的form表单覆盖了后面的内容,就不好看了)?
      

  4.   

    问题解决了。虽然有点笨拙, 呵呵页面中, <div id="replyarea${msg.id}"></div> 仍然放入 <s:iterator> 里面, 就如上面一样,不过 id 号后面增加了 ${msg.id} 使得每个 div 跟每条留言绑定;然后在 js 中: function toReply(msgId)
    {
           var str="";
           str += "<form action='saveReply.action?msgId="+ msgId + "'" + " method='post'>";
           str += "<textarea name='reply.content' id='replytext' col='45' row='10'></textarea>";
           str += "<input type='button' value='取消'> onclick='return cancel(msgId);'>&nbsp;&nbsp;";
           str += "<input type='submit' value='提交' onclick='return validateReply();'>"
           str += "</form>";
           var areapos = "replyarea"+msgId;
           var replyarea = document.getElementById(areapos);
           var replytext = document.getElementById("replytext");
           replyarea.innerHTML = str;  
                
           return false;
     }return cancel(msgId); 写法有点问题, 不过,大问题已经解决。这个我再纠正一下啊。