`
sprite
  • 浏览: 63781 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用DWR实现搜索自动提示(三)

阅读更多
事件处理类
js 代码
  1. //控制器类   
  2. TextSuggestKeyHandler = Class.create();   
  3.   
  4. TextSuggestKeyHandler.prototype = {   
  5.     //构造方法   
  6.    initialize: function( textSuggest,delay ) {   
  7.        //TextSuggest类的引用   
  8.       this.textSuggest = textSuggest;   
  9.       //输入框的引用   
  10.       this.input       = this.textSuggest.textInput;   
  11.       this.delay     = delay || 0.3;   
  12.       this.timer     = null;   
  13.       this.lastValue = this.input.value;   
  14.       //为输入框增加事件响应机制   
  15.       this.addKeyHandling();   
  16.    },      
  17.         
  18.    addKeyHandling: function() {         
  19.       this.input.onkeyup    = this.keyupHandler.bindAsEventListener(this);   
  20.       this.input.onkeydown  = this.keydownHandler.bindAsEventListener(this);   
  21.       this.input.onblur     = this.onblurHandler.bindAsEventListener(this);             
  22.       if ( this.textSuggest.isOpera )   
  23.          this.input.onkeypress = this.keyupHandler.bindAsEventListener(this);   
  24.    },      
  25.     //按键按下事件响应   
  26.    keydownHandler: function(e) {   
  27.       var upArrow   = 38;   
  28.       var downArrow = 40;   
  29.   
  30.       if ( e.keyCode == upArrow ) {   
  31.          this.textSuggest.moveSelectionUp();   
  32.          //匹配选中在IE下会报selectRange()方法中的this.suggestions为空或不是对象 现也不需这功能暂时不用   
  33.           //setTimeout( this.selectRange.bind(this), 1 );   
  34.       }   
  35.       else if ( e.keyCode == downArrow ){   
  36.          this.textSuggest.moveSelectionDown();   
  37.       }   
  38.    },   
  39.     //放开按键事件响应   
  40.    keyupHandler: function(e) {             
  41.       if ( this.input.length == 0 && !this.isOpera )   
  42.             this.textSuggest.hideSuggestions();             
  43.        if ( !this.handledSpecialKeys(e) ){   
  44.         if(this.lastValue == this.input.value){   
  45.             return;    
  46.           }              
  47.         if(this.timer){   
  48.             clearTimeout(this.timer);   
  49.          }   
  50.         this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);   
  51.         this.lastValue = this.input.value;             
  52.      }           
  53.    },   
  54.       
  55.    onTimerEvent: function(){   
  56.       this.timer = null;   
  57.       this.textSuggest.handleTextInput();    
  58.    },   
  59.       
  60.     //处理特殊按键   
  61.    handledSpecialKeys: function(e) {   
  62.       var iKeyCode  = e.keyCode;   
  63.       var enterKey  = 13;   
  64.       var upArrow   = 38;   
  65.       var downArrow = 40;   
  66.       if ( iKeyCode == upArrow ||iKeyCode == downArrow ) {   
  67.          return true;   
  68.       }else if ( iKeyCode == enterKey ) {   
  69.           //回车则set入数据   
  70.          this.textSuggest.setInputFromSelection();   
  71.          return true;   
  72.       }   
  73.       if ((iKeyCode!=8 && iKeyCode < 32) || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123)){   
  74.          return true;   
  75.       }          
  76.       return false;   
  77.    },   
  78.     //匹配选中   
  79.    selectRange: function() {        
  80.       var suggestion  = this.suggestions[ this.selectedIndex ].districtName;         
  81.       var iStart = this.input.value.length;    
  82.       var iEnd   = suggestion.length;            
  83.        //check for support of typeahead functionality   
  84.     if (this.input.createTextRange){                    
  85.         this.input.value = suggestion;                 
  86.         var oRange = this.input.createTextRange();    
  87.         oRange.moveStart("character", iStart);    
  88.         oRange.moveEnd("character",  suggestion.length- this.input.value.length);         
  89.         oRange.select();   
  90.            
  91.     //use setSelectionRange() for Mozilla   
  92.     } else if (this.input.setSelectionRange) {   
  93.         this.input.setSelectionRange(iStart, iEnd);   
  94.     }   
  95.     //set focus back to the textInput   
  96.     this.input.focus();          
  97.        
  98.    },   
  99.     //失去焦点事件响应   
  100.    onblurHandler: function(e) {   
  101.       if ( this.textSuggest.suggestionsDiv.style.display == '' )   
  102.       //如果当前输入是显示的,那么点击其他地方应该把选择值注入输入框   
  103.          this.textSuggest.setInputFromSelection();   
  104.       this.textSuggest.hideSuggestions();   
  105.    }   
  106.   
  107. };   

 

使用freemarker封装,使其成为组件,在需要的地方能方便的使用。autocomplete.ftl如下:通过dwrmethod参数将要使用的service方法传入前端处理程序。一并传入的还有显示样式

js 代码
  1. <#include "/${parameters.templateDir}/simple/text.ftl" />   
  2. <script type="text/javascript">    
  3.   var suggestOptions = {          
  4.          //层样式   
  5.          suggestDivClassName: ${parameters.suggestDivClassName ? default("'suggestDiv'")},   
  6.          //选项样式   
  7.          suggestionClassName: ${parameters.suggestionClassName ? default("'suggestion'")},   
  8.          //匹配样式   
  9.          matchClassName     : ${parameters.matchClassName ? default("'match'")},   
  10.          //是否匹配输入框宽度   
  11.          matchTextWidth     : ${parameters.matchTextWidth ? default('true')},   
  12.          //选项颜色   
  13.          selectionColor     : ${parameters.selectionColor ? default("'#FFB55E'")},   
  14.           //是否从头匹配   
  15.          matchAnywhere      : ${parameters.matchAnywhere ? default('false')} ,   
  16.          //是否忽略大小写   
  17.          ignoreCase         : ${parameters.ignoreCase ? default('false')},   
  18.          //显示数目   
  19.          count              : ${parameters.count ? default(10)},   
  20.          //隐藏字段的Id              
  21.          hiddenId         : ${parameters.hiddenId ? default('')}    
  22.       };    
  23.    new TextSuggest('${parameters.id}',${parameters.dwrMethod}, suggestOptions);        
  24. </script>   
分享到:
评论

相关推荐

    DWR实现Google自动提示功能

    在这个实例中,“DWR实现Google自动提示功能”是利用DWR框架来构建一个类似于Google搜索框的自动提示功能,用户在输入框中输入时,后台会实时地根据输入内容提供相关的建议,无需页面刷新。 一、DWR框架详解: DWR...

    搜索自动提示列表的dwr实现实例

    3. **DWR实现搜索提示的步骤** - **创建Java后台服务**:首先,你需要在Java后端编写一个服务接口,该接口接收用户的输入并返回相关的搜索建议。这可能涉及到数据库查询或者其他数据源的操作。 - **配置DWR**:在...

    搜索提示框的自动显示dwr实现实例

    在这个“搜索提示框的自动显示DWR实现实例”中,我们将探讨如何利用DWR技术创建一个智能、高效的搜索输入框,当用户输入时,自动显示相关建议,提升用户体验。 首先,我们需要理解DWR的基本工作原理。DWR通过在后台...

    dwr实现局部刷新

    4. **AutoComplete**:DWR提供了自动完成功能,用于在客户端输入框中动态提示可能的匹配项,例如在搜索框中输入内容时显示建议列表。 5. **Echo**:DWR的Echo功能允许在后台执行长时间的任务,同时保持与客户端的...

    dwr实现聊天室+级连+搜索提示

    在这个“dwr实现聊天室+级连+搜索提示”的项目中,我们将探讨以下几个关键知识点: 1. **DWR聊天室实现**: 聊天室的实现通常涉及客户端和服务器端的实时数据交换。DWR通过创建JavaScript对象(Callee)来映射...

    纯JSP+DWR实现三级联动下拉选择菜单 实现无刷新联动 DWR判断用户是否存在 ajax二级联动菜单 DWR操作数据库模拟实现Google搜索效果

    本示例主要展示了如何使用纯JSP和Direct Web Remoting (DWR)技术来构建一个功能丰富的用户界面,其中包括三级联动下拉选择菜单、无刷新联动、用户存在性判断以及模拟Google搜索效果的功能。DWR是一种JavaScript库,...

    Ajax dwr框架实现自动补全功能

    在本文中,我们将深入探讨如何使用Ajax、Direct Web Remoting (DWR) 框架以及Hibernate ORM工具来实现一个自动补全功能。这个功能类似于百度搜索引擎中的输入提示,能够根据用户输入的字符动态地提供可能的搜索建议...

    基于JQuery和DWR的自动补全

    综上所述,结合JQuery和DWR实现的自动补全功能,不仅提升了用户输入体验,也为开发者提供了一种高效的数据交互手段。在实际开发中,可以根据项目需求灵活调整和优化,以达到最佳效果。在压缩包文件"buquan"中可能...

    DWR框架实用案例

    一旦服务器完成查询,它会将结果返回给客户端,DWR会自动将这些数据更新到页面的JavaScript变量中,从而实现在用户输入过程中动态更新下拉提示列表。 实现这个功能的具体步骤包括: 1. **配置DWR**:在Web应用中...

    DWR 含架包

    3. **AutoComplete**: DWR支持自动完成功能,常用于输入框中智能提示,如搜索建议等。 4. **CORS(Cross-Origin Resource Sharing)**: DWR支持跨域资源共享,允许来自不同源的HTTP请求访问同一资源,扩展了Web应用...

    Dwr+AutoComplete+pinyin4j 自动匹配(中文,拼音)

    标题 "Dwr+AutoComplete+pinyin4j 自动匹配(中文,拼音)" 提到的技术栈涉及了三个关键部分:DWR(Direct Web Remoting)、AutoComplete(自动完成)和pinyin4j。这些技术在Web开发中都有特定的应用场景。 DWR是一...

    dwr开发指南(中文)

    - **AutoComplete**:提供自动完成功能,常用于搜索框,根据用户输入的字符动态提示可能的匹配项。 - **Remote JavaScript**:允许在服务器端生成并执行JavaScript代码,进一步增强了动态性。 4. **DWR的安装与...

    dwr官方资料和搜集资料大全

    Direct Web Remoting (DWR) 是一个开源Java库,它允许JavaScript在Web浏览器中与服务器端的Java对象进行交互,从而实现动态、实时的Web应用。这个“dwr官方资料和搜集资料大全”包含了丰富的资源,帮助开发者深入...

    DWR框架开发详解从入门到精通

    - **AutoComplete**:DWR提供了自动完成功能,常用于搜索框的智能提示。 在深入学习DWR的过程中,你可能还会遇到如何处理异步调用、错误处理、性能优化等方面的问题。通过阅读"DWR框架开发详解从入门到精通"这本书...

    ajax常用框架集

    - **Auto-Complete**:DWR提供了自动完成功能,常用于搜索框的实时提示。 2. **DWR的工作原理** - **Reverse Ajax**:DWR利用了HTTP长连接,使得服务器可以主动向客户端推送数据。 - **JavaScript与Java的映射**...

    几行代码的二级联动和类似goolge的输入下拉提示

    而"类似Google的输入下拉提示"则是指搜索引擎或输入框在用户输入时,根据输入内容动态展示相关建议,这种功能在很多网站和应用中都有广泛的应用,能够快速引导用户找到他们可能想要搜索的内容。 DWR(Direct Web ...

    快速输入地址

    标题“快速输入地址”可能指的是在网页应用中实现快速、自动完成的地址输入功能,这通常涉及到JavaScript和服务器端的交互。在这个场景下,DWR(Direct Web Remoting)可能是被使用的工具,它是一个开源Java框架,...

    像google的文本框的ajax例子

    标题 "像Google的文本框的Ajax例子" 涉及的是使用Ajax技术来实现类似Google搜索框的实时提示功能。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过...

    网上书前台管理系统店

    3. **MyEclipse**:这是一个强大的Java EE集成开发环境,基于Eclipse,支持Web、Java、.NET等多种开发,提供了丰富的代码提示、自动完成、调试等功能,便于开发者高效编码。 4. **Struts框架**:Apache组织开发的...

Global site tag (gtag.js) - Google Analytics