我想做类似google的文本框,输入第一(多)个字母,以该字母开头的条目就列出来
所有条目都已经在库里了

解决方案 »

  1.   

    主要还是查询sql写对. 用到 "%" sql中表示任意长度字符事件用onchange
      

  2.   


    估计看google做出来的效果挺炫的然后大家都想做吧,onchange不停的去Ajax提交与获得数据,感觉上这样做极度浪费性能,网速慢得时候数据还没接收到用户都输入完要输入的东西了....如果说要快的话就是在页面上缓存数据,直接从里面找,不过这样做又不能保证页面在未刷新的情况下数据同步,为了同步又只好定时请求数据...要做好这个功能不简单,期待高手给出最优方案,关注中
      

  3.   


    听说google每天要换1卡车硬盘.这也许就是你说的,数据已经存好了.一般人还真玩不起.
      

  4.   

    推荐一个很好用的控件:
    类似GOOGLE输入框的自动提示框控件
    http://www.msproject.cn/people/icscs/article/106.html
      

  5.   

    这是我收藏的一个页面,来自:codeproject,
    Auto-complete Control :
    http://www.codeproject.com/KB/scripting/jsactb.aspx
      

  6.   

    不用这么复杂,我在想把所有条目先放在数组里,然后再查找是否简单点,是asp程序
      

  7.   

    不用这么复杂,我在想把所有条目先放在数组里,然后再查找是否简单点,是asp程序
      

  8.   

    设想一下,如果我输入a,符合a的假设只有50条,我们不知道他在数组的什么位置,就得比较4000次,以保证把所有a开头的数据拿出来,姑且不说效率,从实用性出发,在那个选择菜单里有50个选择,用户一个个去看?他不会这么做,那么他会去输入第二个字符,b,然后在已经找到的50条里面继续对比,做起来js不是很难,就是一个异步获取数据,然后显示,重点是sql哪里,要控制出来的数据,不然没效果。页面的话上面有代码了,主要是后台。我提议楼主先协商好怎么选择数据先。数据才是程序的灵魂
      

  9.   

    是的,页面中的代码只是些js事件,费些劲,但是还是可以写得出来。这个效果的关键在于:搜索算法,因为数据量大的话,搜索做好优化才行。
    如果我输入了A,有非常多的数据,怎么弄,这不是页面左右的,这是服务器那边实现的(如果用js,那不得费死劲),服务器那边最多给出10条记录,难点在这些记录的选择上,这就涉及到搜索算法了,页面只负责显示(你看百度谷歌搜索几十万条记录,不到1秒就出来结果了,这就是优化的结果。)
    还是说,页面只做最简单的部分,一部分js而已。核心在搜索算法,这个算法根据业务,会不同。
      

  10.   

    费劲还不只,这样个判断法,页面不假死都难,你想看你要比较的话就必须截取字符,1000条截取1000次,其中绝大部分是没必要的截取,因为那些本身就不是用户需要的信息....搞定数据来源才做页面,页面无非就是div显示提示先,Ajax异步请求数据,然后截字符对比等一些简单的操作,不是很难做的。只是烦杂而已。得搞定搜索
      

  11.   

    DronFw,全称Dron Framework,她负责管理一个站点中客户端的脚本类库,使用 DronFw 的网页不需要关心所引用类的具体位置,只要传递相应的类名给 DronFw 便可以引用该类了,一个站点只需在根目录下放一个 DronFw,站点内无论路径多么复杂的网页都可以使用 DronFw。 导入包,就ok了
      

  12.   

    问题进一步简化了,所有条目都读出来了,在select中,这样有没有比较简单的办法啊?
      

  13.   

    如果所有条目都读出来了,那页面上实现的方案就很多了,比如用extjshtml中:
    <input type="text" id="local1"/>js中:
         var data =                                  // 所有数据
            [
                    ['1','Lislie','D005','male'],
                    ['2','Merry','D004','female'],
                    ['3','Edison','D003','male'],
                    ['4','Mark','D002','male'],
                    ['5','Leeon','D001','male']
            ];
           
        var ds = new Ext.data.Store({                  // 数组reader
         proxy : new Ext.data.MemoryProxy(data) ,
         reader: new Ext.data.ArrayReader({},[
         {name: 'id'},
                            {name: 'name'},
                            {name: 'depno'},
                            {name: 'sex'}
         ])
        });    ds.load();   // 加载
     
        var storeList = new Ext.form.ComboBox({         
                    store: ds,
                    valueField:'id',      
                    typeAhead: true,
                    displayField: 'name',      
                    triggerAction: 'all',
                    emptyText:'Select a store...',
                    mode: 'local', 
                    selectOnFocus:true,
                    applyTo: 'local1',               // 指向页面input
                    width:135
            });使用:  alert(storeList.getRawValue());
      

  14.   

    所有条目都读出来,在select中。
    大概4000多条,每条长度10个字符左右,都是字母和数字
    输入字母和数字,相关的记录就被筛选出来
      

  15.   

    前台ext得combox dwr调用,库中存着检索过得数据内容,每次查询后置入缓存,或者之间定义个静态变量,这样只一次得数据读取。得到得数据再自己弄。我是做了个相似度得排序