Page 67 - JavaScript修炼之道
P. 67

56       第四部分  表单技巧


             任务 25  自动完成输入


                 在表单提交到服务器端之前就验证输入有不错的效果。还有更好的用户体验吗?有!那就是
             在用户输入的同时做验证。将用户的当前输入和数据库中的有效且合法输入进行匹配,我们可
             以给用户提供输入建议。这些建议不仅能帮助用户修正拼写等方面的错误,还能自动完成出现在
             建议列表中的常用项,省去用户手动输入这些文本的麻烦,如下图所示。













                                                                       ①
                 传统上,这被称为自动完成。唯一的问题是,你要用的数据源 是预先取到客户端(以简单
             数组的形式,或者用复杂点的结构化的东西,比如JSON字面量),还是就让它放在服务器上,随
             用户键盘输入不断地去查询。

                                                                                       ②
                 这里有一条不错的经验法则:如果数据源的数据量足够小(比如是要参考的州名 、货币单
             位或者某个品牌的各种型号名称),那就把它预取到JS里(比如说在初始化页面时给它生成
             JavaScript字面量),否则就应该用Ajax。使用Ajax需要调好查询频率,即使遇到网速慢或者用户
             打字快也要保证良好的用户体验。

                 Script.aculo.us 1.8 有个不错的自动完成控件,它有大量的配置参数。我这里就用它来做自动
             完成,当然要包括它所基于的Prototype库。根据数据源的位置不同,选择用Autocompleter.Local
             还是用Ajax.Autocompleter(我知道这个命名不是很一致,但我也只能对此表示遗憾)。前一
             种情况需要指定数据源数组,然后用一些参数(fullSearch、partialSearch、partialChars
             和ignoreCase)调整匹配行为;后一种情况则是提供Ajax的基本URI以及那些Ajax相关的配置,
             包括要发给服务器端的参数。






             ——————————
                ① 用来做匹配的数据。*
                ② 美国的各个州(state)的名称。*
   62   63   64   65   66   67   68   69   70   71   72