本想在系统中实现类似baidu或者是google的那种输入文字或者数字,然后会弹出自动下拉列表的功能,但是我做出来的东西,总是一卡一卡的。原因可能是我在文本框中加了事件 onpropertychange 调用列表函数导致的。
我现在的想法是,不在文本框中添加事件 onpropertychange ,而是 让系统自动检测 文本框是否是处于输入状态,如果处于输入状态,那么每隔100ms去检测一次数据,这样就可以避免卡了。
这个只是想法,望高手指教下,谢谢先。
ps:我已经查过诸多资料了 都没有得到

解决方案 »

  1.   

    每隔100ms去检测一次数据 
    ============
    那还不如onpropertychange呢
      

  2.   

    这个估计是你的列表函数的问题 你是怎么写这个ajax函数的啊?
      

  3.   

    ajax函数是自己封装的,系统好多地方用,是没有问题的,关键就是去取数据的时候,需要填充四次datatable,然后再进行循环datatable放入到列表中,显示出来,这个地方耗时间了。
    现在就是需要数据准备完,就推送到前台去,而不是卡在那儿,等待数据
      

  4.   

    可以使用onpropertychange事件,但是需要延时执行在事件里面,你可以这样处理
    //检查是否有延时的方法等待执行
    if(window.hasWait){
          window.clearTimeout(window.hasWait);
    }
    window.hasWait = window.setTimeout("......", 300);//这个时间,你自己多试验来决定用多长
      

  5.   

    用分词hash,集群(结果放内存)。否则你每输入一次就去查一次。那百度的服务器还不瘫痪了。
      

  6.   

    用定时器check你输入的值有没有改变。有改变才会再次查询
      

  7.   

    前台没问题,不用想。
    问题是你的后台查询和数据库设计上。这种自动提示功能,应该从很方便很有效率取到数据的地方得到,怎样也不能是这样麻烦的即时过程。如果这些数据不适合提前准备到一个专门的表或放到APPLICATION变量里,那这个自动提示是否应该加,就需要重新考虑了。不是凡是有点用的就要添加上去,要根据实际情况,使用合理有度。
      

  8.   

    整台服务器资源是你自己独享的,速度很快的话,尝试下这种功能也未必不可!但是设置为100MS也太短了些!
    如果你的后台是PHP,可以可以考虑使用内存缓冲,缓解数据库压力!其次就是数据库尽可能优化处理,能使用存储过程,最好不过了,其他后台我想也有对应的办法!
      

  9.   


    你要使用延时执行操作,不是每次onpropertychange的时候都发送ajax,这样如果用户输入快的时候你可以clear掉上一次的延时操作。要想速率更加快一点,可以使用缓存。将关键字作为键存入json对象中,这样再增加或者缩短关键字的时候判断是否有缓存,有就用缓存的,没有再发送ajax请求
      

  10.   

    我自己也做过多次这样的浮框, 一般keyup()就可以,onpropertychange也很好,onpropertychange有个不好的地方就是 无论什么时候改变了都触发。这都不是重点啦,下面说真的:
    1.浮动的div(也许你的不是div)最好等输入完或选中了选项再隐藏。
    2.不要用 Xdiv.innerHTML = "<div>"+"新的HTML代码"+"</div>"。请学会用DOM插入。Jquery很好用,可以用这个来做DOM操作。
    附以前做的部份代码做。参考function fly_show(){
    $("#fly").empty();
    for (var i = 0; i < Cu_A.length; i++) {
    var cc = $("#_fly").clone();
    cc.html(Cu_A[i][1]);
    (function($){
    var i_x=i;
         cc.click(function(){
          toT1(i_x);
         });
    })(jQuery);   
    cc.appendTo($("#fly"));
    }
    $("#fly div").hover(function(){$(this).addClass("mover");},function(){$(this).removeClass("mover")});
    }
      

  11.   

    我觉得这个功能没必要费劲心思去实现,网上有很多:
    http://scriptlover.com/agent/?url=/controls/suggest/
    http://scriptlover.com/agent/?url=/controls/suggest.rar.gz当然如果为了练练手,还是可以的。以上是个参考。