需求:页面首部有个textarea,页面尾部也有个textarea。首部和尾部字段内容完全一样。当我在首部的textarea输入内容后,往下拉屏幕。尾部的textarea也自动显示相应内容。
1.不能在首尾分别写两个name不同textarea,因为提交表单时,name应当是唯一的,而且,如果写了两个textarea,必须保证一处更改,另一处也更改,比较麻烦。
2.所以只能有一个textarea,当往下拉屏幕,拉到最底部时,首部的textarea“滚动”到底部。
3.问题是:如何实现首尾联动(在首部更改,拖到底部时,textarea的值也更改,反之亦然),同时让用户感觉不到“滚动”的痕迹,让用户以为这就是两个不同textarea。

解决方案 »

  1.   

    用js给赋值不就行了吗,两处内容统一很容易啊,你画张效果图出来最好,这样说一堆还有很多不明白的地方
    textarea是可以输入的,如果在底下输入呢,上面也要变吗
    你的第2条,name是可以相同,但这也不叫只有一个textarea啊,另一个不显示吗?
    你第2条还说拉屏,第一个到底部?那底下那个跑哪去了?放一起?
    当我在首部的textarea输入内容后,往下拉屏幕尾部的textarea也自动显示相应内容
    不拉屏幕的时候呢,如果也变的话,话就给你说不太对劲,你把效果与功能想法分开,想实现啥功能,想要啥效果,别混在一起,感觉很乱,明朗的需求才是实现的前提
      

  2.   

    不好意思,有些混乱,重新说下。
    1.希望达到的效果:在页面首部textarea输入值后,尾部的textarea自动联动。反之亦然。
    2.我的思路:在页面只有一个textarea,即首部的textarea。由于页面很长,两个textarea不会同时出现在页面上。当往下拉页面时,利用js方法把首部的textarea“拖”到底部。往上拉页面时,再把textarea“拖”首部。
    3.为什么不在首尾各设置一个textarea,其中一个值改变时,利用dom赋值?原因一:有几十个页面都需要这种效果,其他的页面可能是几个button和input组成的复杂div。如果采用dom赋值的方法,有些麻烦。而采用js拖动,代码可复用,也方便。原因二:页面加载时,textarea需要初始化,如果只有一个textarea,struts默认就可以。如果两个textarea,需要改动几十处代码。
      

  3.   

    1.不能在首尾分别写两个name不同textarea,因为提交表单时,name应当是唯一的,而且,如果写了两个textarea,
    必须保证一处更改,另一处也更改,比较麻烦。
    ------
    做2个表单就好了,一个页头,一个页尾,表单action一样,textarea就可以name一样了。
    如果放到同一个表单,可以在表单提交的时候根据视窗的scrollTop设置其中一个textarea为disabled就不会提交这个textarea了。联动简单,任何一个textarea添加blur事件,设置另外一个textarea的值
    <script type="text/javascript">
    function setDisabled(f){
      var top=Math.max(document.body.scrollTop,document.documentElement.scrollTop);
      f.content[top>200?0:1].disabled=true;
    }
    </script>
    <form onsubmit="return setDisabled(this)">
    <textarea cols="50" rows="1" name="content" onblur="this.form.content[1].value=this.value"></textarea>
    <div style="height:1000px"><input  type="submit" value="提交"/></div>
    <textarea cols="50" rows="1" name="content" onblur="this.form.content[0].value=this.value"></textarea>
    </form>
      

  4.   

    回showbo,首先谢谢你的回复,这个方法是可行的,只是有两个问题:
    1.初始化的问题:当页面加载时,需要初始化textarea的值。有几十个页面需要这种效果,这样后台的初始化代码就要改很多。如果一个页面只有一个textarea,默认的初始化就可以
    2.联动的问题:其他页面也需要首尾联动,可能是几个text加textarea首尾联动。用onblur联动,每一个输入域都需要监听。
      考虑以上两点,我想能不能在页面中始终只有一个textarea,当页面拉到底部时,用js方法把首部的textarea“拖”过来。
      

  5.   

    回crying_boy:表达不清,抱歉。就拿CSDN这个页面来举例吧,尾部有个回复框,假设首部也有个回复框。我要做的就是他们互相联动:一方改变,两方都变。再参考5楼6楼的回复。
      

  6.   

    本帖最后由 net_lover 于 2012-10-14 15:10:03 编辑
      

  7.   

    不知道这是不是你想要的效果
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>测试</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    </head>
    <script type="text/javascript">function exchange(a,b,c){
        var html=b.innerHTML;
        b.innerHTML='';
        b.style.display='none';
        a.innerHTML=html;
        document.getElementById('content').value=c;
        a.style.display='block';
    };function scroll(){
        var top=document.getElementById("top");
        var y1=top.offsetTop+top.offsetHeight;
        var buttom=document.getElementById("buttom");
        //获取顶离偏移量 
        var y= document.documentElement?(document.documentElement.scrollTop || 0):(document.body.scrollTop || 0);
        y = Math.max(y, (window.scrollY || 0));
        var v=document.getElementById('content').value;
        if(y>y1){
            if(buttom.style.display!='block'){
                exchange(buttom,top,v);
            }
        }else{
            if(top.style.display!='block'){
                exchange(top,buttom,v);
            }
        }
    }
    window.attachEvent?window.attachEvent("onscroll",scroll):window.addEventListener("scroll",scroll,false);
    </script><body>
    <div id="top" style="display:block"><textarea cols="50" rows="10" id="content"></textarea></div>
    <div style="height:1000px;width:100%;border:1px solid #bfbfbf"></div>
    <div id="buttom" style="display:none;"></div>
    </body>
    </html>
      

  8.   

    可以,设置表单容器为绝对定位,然后添加window.onscroll事件判断是否移动到底部,然后设置表单容器的top属性就好了需要注意的是页头页脚要预留表单容器一样高度的空白,防止内容重叠<script type="text/javascript">
    window.onload=function(){
      var dvForm=document.getElementById('dvForm')
      window.onscroll=function(){
        var top=Math.max(document.body.scrollTop,document.documentElement.scrollTop)
       ,scrollHeight=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
        dvForm.style.top=(top>=dvForm.offsetHeight?scrollHeight-dvForm.offsetHeight:0)+'px';
      }
    }
    </script>
    <style type="text/css">
    body,form{margin:0px;top:0px;}
    #dvForm{position:absolute;left:0px;top:0px;background:#fff;}
    .content{height:1000px;background:#eee;padding:50px 0px 50px 0px;display:block}
    </style>
    <div id="dvForm"><form onsubmit="return setDisabled(this)">
    <textarea cols="50" rows="1" name="content"></textarea>
    </form>
    </div>
    <div class="content">内容容器,注意要设置margin-top>=表单容器的高,页脚设置margin-bottom>=表单容器的高,防止内容重叠</div>