我想实现一个树,这颗树要在下拉框内显示,这功能我都差不多实现了。现在遇到的难题是:
我想再在一个文本框下面动态生成一个div(div设置样式可以形成下拉框),而在文本框位置不确定,所以随着文本框位置在其下面动态生成div,请问我怎么实现?以下是我的思路,但都没有成功,1.我想获得文本框位置,然后根据文本框位置定位div位置,在测试页面html没有问题,但加入项目就不行了,2.在文本框后面插入div,但最终没有实现.
请问大家有没有实际的代码和思路实现?谢谢了。

解决方案 »

  1.   

    但加入项目就不行了
    那说明代码有冲突,根据错误信息调试吧。另外你用一些开发人员工具如firebug
      

  2.   

    能有什么问题??? 你在创建文本框的时候,给它包上一个DIV。然后在DIV里面文本框的后面再插入就OK了。
      

  3.   

    你引入的代码肯定有冲突。更简单的办法是给input和div包上一个div
      

  4.   

    计算文本框的位置
    (offsetLeft,offsetTop+offsetHeight) 就是div 的 left ,topdiv 直接放入 body,绝对定位这段代码有这个效果<!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>
        <style type ="text/css">
        html,body{width:100%;height:100%}
        ul{padding:0px;margin:0px;list-style:none;}
        li{cursor:pointer;padding:0px 5px; line-height:25px;height:25px;}
        </style>
    </head>
    <body>
     <p>
        <input type='text' id='txtInput'  onkeyup='getSearchKeys()'/>
        <div id='divShow' style="position:absolute; z-index:9999; width:200px; height:auto; display:none;border:1px solid #ddd">
        <ul>
        <li>aaa</li>
        </ul>
        </div>
        </p>
    </body>
    <script type="text/javascript">
    var keys=['ada','sdfsd','bbb','sfga','dfhgfh','235s','dfew','ghjk','hjkghjk','fgjgfjf','fghjgfj','2345f','fthtr','sfgerw','tyerth','vnmu','wertewr','wert','asdfaf','zxcvd','gkju','dvfgdh','2354af','adsf','erterter','fghdfg','xvdfg','kjhu','qweasdas','xzce','werwre','zzczc','rtewtrew']; //  搜索值,可以用Ajax从数据库获取
    var txtInput ;
    var divShow ;
    window.onload=function()
    {
         txtInput =document.getElementById("txtInput");
         divShow = document.getElementById("divShow");
         var p =getAbsPoint(txtInput);
         divShow.style.left = p.x +'px';
         divShow.style.top = p.y + txtInput.offsetHeight + 'px';
       txtInput.onclick = divShow.onclick=function(e)
        {
             e = e||event;
             var t = e.target||e.srcElement        if(t.tagName.toLowerCase()=='li')
            {
              txtInput.value = t.innerHTML; 
               divShow.style.display = "none";
               return;
            }
            if(e && e.stopPropagation){
              //W3C取消冒泡事件
              e.stopPropagation();
              }else{
              //IE取消冒泡事件
              window.event.cancelBubble = true;
              }
        };
        document.body.onclick=function(e)
        {
            divShow.style.display = "none";
        };
    };
    function getSearchKeys()
    {
      var s= txtInput.value;
        if(s=='')
        {
            divShow.style.display = "none";
            return;
        }
          var arr=['<ul>'];
          for(var i=0;i<keys.length;i++)
          {
            if(keys[i].indexOf(s)>=0){
            arr.push('<li>'+keys[i]+'</li>');
            }
          }
        
          if(arr.length>1){
            arr.push('</ul>');
            divShow.innerHTML = arr.join('');
            divShow.style.display = "block";
          }else{
            divShow.style.display = "none";
          }
    }function getAbsPoint(e)// 获取绝对坐标
    {
        var x = e.offsetLeft;
        var y = e.offsetTop;
        while(e = e.offsetParent)
        {
            x += e.offsetLeft;
            y += e.offsetTop;
        }
        return {"x": x, "y": y};
    }
    </script>
    </html>
      

  5.   

    去看看css绝对定位吧,你的文本框和div统一放在一个父容器div上,假设这个父容器div的id为test1,那么test1的position设成relative,然后test1下的那个div的position设成absolute,再设置left和top,只要你的文本框宽度和高度确定,div的left和top就能确定,不管这一套东西位置在哪都行
      

  6.   

    比如这样:    <div style="position:relative">
           <input type="text" name="mytextbox" style="width:200px" />
           <div style="position:absolute; border:1px solid #ff0000; width:200px; height:200px; top:26px; left:0px;"></div>
        </div>
    这段代码你放哪个位置都行