function selectYcl(obj){

$(document).ready(function(){  
   var type = 'type'; 
      $('#'+obj.id+'').autocomplete("doYclmc",{ 
       delay:200, 
         minChars: 0,              
         max: 15,                
         autoFill: false,        
         mustMatch: true,           
         matchContains: false, 
         scrollHeight: 220,
         cacheLength:15,  
         extraParams: {},
         formatItem: function(data, i, total) {      
           return data[0];      
         },      
         formatMatch: function(data, i, total) {      
           return data[0];      
         },      
         formatResult: function(data) { 
           return data[0];   
         }      
     });      
 });

}
我前段时间用jQuery做了一个控件,但出现了一个问题,由于TEXT是动态增加的,ID所以不能确定,我就用了上面的方法,功能到是基本可以实现,但是我得点多次才会出现我要的结果,最主要的是点了一次后autocomplete会运行多次,以后增加的会越点越慢,jQuery以前也没用过,只是做东西时看了一下,现在我上网找了好多资料,都没有看到解决的方法,希望各位能帮帮忙,可以给我说下autocomplete原理更好!

解决方案 »

  1.   

    很多人都不用那个。都自己写。$.autocompleter = function(input, options) {};没研究过特效。你看:http://jquery.bassistance.de/autocomplete/demo/
      

  2.   

    我也在想自己重新写一个,但写了会改很多,并且老板还让我今天搞完,实在没有办法,因为这个类似GOOGLE功能,单击就会全部显示,又要在动态增加的TEXT里实现(autocompleter 到是可以在固定的ID里实现),实在是想不出什么好办法,也找不到有什么好的组件
      

  3.   


    1 实现类似GOOGLE功能,双击显全部数据,输入就根据条件自动选出结果
    2 在动态增加的TEXT 里实现
      

  4.   

    跟ID有什么关系么?
    你直接去的所有input type="text",然后遍历,不行么?jQuery里有现成的each方法啊。
      

  5.   

    有不是jqeruy的自动补齐类似的功能,像开心网那样找好友的。javaEye上就有例子。
      

  6.   

    可能你还没有明的我说的意思,功能要求是:
    我动态增加一行,行了有Text,每个Text都要做到与GOOGLE一样的功能,这个行是不固定
      

  7.   

    我还是不明白。无论是不是动态增加的text,你应该都能取得这个text的object吧?
    取得以后,做一个绑定不行么?
    你不知道怎么取得这些text的object么?
      

  8.   

    我是取得了text的object,像我上面的代码,我点一次(
    $('#'+obj.id+'').autocomplete("doYclmc",{ )
    autocomplete里面的东西操作了sevelet(doYclmc)很多次,这样就使得我后面增加TEXT后,点TEXT,他弹出的东西越来越慢,我实在找不出什么原因来
      

  9.   

    你能否把页面完整点的代码发上来看看?
    感觉特别奇怪:
     $(document).ready(
    这样的语句你却写在某个方法体里。
      

  10.   


    function add()//增加到TBODY里

    var tb=document.getElementById("tb");
    rows=tb.rows.length;
    if(i==0)i=rows-1;
    i++;
        tb.appendChild(addRow());
    }
    function addRow()//增加一行
    {
    var row=document.createElement("tr");row.appendChild(addCell('txt','',''));
    row.appendChild(addCell('checkbox','',''));
    row.appendChild(addCell('text','ycl',false));
    row.appendChild(addCell('text','cpgg',true));
    row.appendChild(addCell('text','dw',  true));
    row.appendChild(addCell('text','ys',false));
    row.appendChild(addCell('text','jcqdw',false));
    row.appendChild(addCell('text','hw',false));
    row.appendChild(addCell('text','dj',false));
    row.appendChild(addCell('text','sl',false));
    row.appendChild(addCell('text','jlsl',false));
    row.appendChild(addCell('text','je',false));
    return row;
    }
    //增加TEXT
    function addText(id,IsRead)
    {
    var ip=document.createElement("input");
    ip.style.width = '120%';
    ip.style.height = '18px';
    ip.style.border = '0';
    ip.style.margin = '-2';
    ip.style.padding = '3 3 0 3';
    ip.style.fontFamily = 'tahoma';
    ip.style.fontSize = '8pt';
    ip.setAttribute("type","text");
    ip.setAttribute("name",id+"_"+i);
    ip.setAttribute("id",id+"_"+i); 
    ip.setAttribute("readOnly",IsRead);if(id=='ycl')
    {
    ip.onclick=new Function("selectYcl(this);");//给动态增加的TEXT增加onclick方法
    ip.onkeypress=new Function("CpbmEnter(this,event)");
    }
    if(id=='hw')
    {
    ip.onclick=new Function("selectHw(this);");
    }
    if(id=='ys')
    {
    ip.onclick=new Function("selectYs(this);");
    }  if(id=='dj')
     {
       ip.onblur=new Function("countJe(this);");
      }  if(id=='sl')
      {
       ip.onblur=new Function("countJe(this);");
      }
      if(id=='jcqdw')
      {
       ip.onblur=new Function("selectdw(this);");
      }return ip;
    }function selectYcl(obj){ $(document).ready(function(){  
       var type = 'type'; 
          $('#'+obj.id+'').autocomplete("doYclmc",{ 
           delay:200,  
             minChars: 0,              
             max: 20,                
             autoFill: false,        
             mustMatch: true,           
             matchContains: false, 
             scrollHeight: 220, 
             extraParams: {},
             formatItem: function(data, i, total) {      
               return data[0];      
             },      
             formatMatch: function(data, i, total) {      
               return data[0];      
             },      
             formatResult: function(data) { 
               return data[0];   
             }      
         });   
     });

    }代码很多,我取了一部分,我也不想写方法体里,但是ID不确定,我也只能这样
      

  11.   

    ip.onclick=new Function("selectYcl(this);");//给动态增加的TEXT增加onclick方法
    function selectYcl(obj){    $(document).ready(function(){  
               var type = 'type'; 
              $('#'+obj.id+'').autocomplete("doYclmc",{ 
                  delay:200,  
                 minChars: 0,              
                 max: 20,                
                 autoFill: false,        
                 mustMatch: true,           
                 matchContains: false, 
                 scrollHeight: 220, 
                 extraParams: {},
                 formatItem: function(data, i, total) {      
                   return data[0];      
                 },      
                 formatMatch: function(data, i, total) {      
                   return data[0];      
                 },      
                 formatResult: function(data) { 
                   return data[0];   
                 }      
             });   
         });
    }
    $(document).ready方法是绑定当前页面加载时候的运行的方法,相当与onload。
    你将obj的onclick绑定到selectYcl,则每次点击的时候实际上时在执行页面ready方法的绑定。
    但是,无论怎么绑定,页面不加载,ready中的代码得不到执行。即使页面再次加载,这里的绑定也无效了。那么你在代码中进行autocomplete的绑定会有效果么?
    你为什么不把$(document).ready(function(){ 去掉呢。这样看起来才对啊。
      

  12.   

    谢谢!我去掉过的,效果还是与以前一样,不知道为什么autocomplete还是会执行多次
      

  13.   

    Jquery就是js包装好的方法,你用的越多速度就越慢,是好用,但是要是提高速度要js写
      

  14.   

    慢的原因主要是autocomplete执行多次,实在不明的原因
      

  15.   

    很奇怪哦,怎么会执行多次呢。
    要不你绑定到别的事件看看,比如,onkeyup?
      

  16.   

    刚才试了,还是一样,点第几次SERVLET就调多次(比如我第一次点时正常,SERVLET执行一次,点第2次SERVLET执行2次....)