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

Jquery 插件jquery autocomplete使用

阅读更多

工作中涉及到 需要带有输入提示的功能(如google 搜索提示那样)网上找了一些资料,最好选定jquery autocomplete 来实现,下面介绍一下使用已经,项目中遇到的一写问题

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <%String root=request.getContextPath();%>
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript" src="<%=root%>/js/jquery.js"></script>
	<script type='text/javascript' src='<%=root%>/js/jquery.autocomplete.js'></script>
	<link rel="stylesheet" type="text/css" href="<%=root%>/js/jquery.autocomplete.css" />
	
  </head>
  <script type="text/javascript">
  $().ready(function() {
       function parseFn(data) {   
	       var rows = [];     
	         for(var i=0; i<data.length; i++){     
	            rows[rows.length] = {
	                data:data[i],             //下拉框显示数据格式 
	                value:data[i].name,      //选定后实际数据格式  
	                result:data[i].name  //选定后输入框显示数据格式 
	            };      
	          }     
	         return rows; 
       }
       //var myJSONObject =[{"id":"1","name":"bj"},{"id":"2","name":"sh"},{"id":"3","name":"天津"},{"id":"4","name":"重庆"},{"id":"5","name":"广州"},{"id":"6","name":"深圳"},{"id":"7","name":"南京"},{"id":"8","name":"济南"},{"id":"9","name":"杭州"},{"id":"10","name":"苏州"}];
         var myJSONObject =[{"id":"ak540","name":"zhangliang2"},{"id":"akc696","name":"zhangliang"}];
  		$("#suggest3").autocomplete('autoComplete.jsp', {
		multiple: true,
		autoFill: true,
		mustMatch :true,
		matchContains: true,
		//extraParams:{q:function(){return $("#this").val();}}, 
		dataType: 'json',       
     	parse:parseFn,
        formatItem: function(row,i,max) {              
     		return row.name;
    	},
    	formatMatch: function(row,i,max){       
     		return row.name;
    	},
	    formatResult: function(row,i,max){
	     return row.name;
	    } 
	    // }).result(function(event, item, formatted) {//把返回的结果内容显示在其他文本框上              
         //   $("#ortherid").val(item.name); 
		});
		
  });
  
  </script>
  <body>
   			<label>Multiple Cities (local):</label>
			<textarea id='suggest3' cols='40' rows='3'></textarea>
			<div id="ortherid"></div>
  </body>
</html>

     这里主要是用到了jquery.autocomplete.js 里面的$("#suggest3").autocomplete 方法(这方面的资料比较多,具体可以网上搜索,我也是参考官方例子改写的官方网的DEMO 地址:http://jquery.bassistance.de/autocomplete/demo/

主要从后台返回的结果是以JSON 的数据格式返回的

autoComplete.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="com.autoComplete.*"%>
<%
	City city = new City();
 String query =request.getParameter("q");  
 	//query= new String(query.getBytes("ISO-8859-1"), "UTF-8");  
	String json=city.toJoson(query);
	response.setContentType("application/json;charset=UTF-8");
	response.setCharacterEncoding("UTF-8");
	response.setHeader("Pragma", "No-cache");     
	response.setHeader("Cache-Control", "no-cache");     
	response.setDateHeader("Expires", 0);  
	try {
		PrintWriter out2 = response.getWriter();
		out2.write(json);
	} catch (IOException e) {
		e.printStackTrace();
	}
%>

 后台JAVA 代码

   City

 

package com.autoComplete;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import net.sf.json.JSONArray;

/***********************************************************************   
 *   
 *   City.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   2010-8-5   上午11:18:58   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class City {

	/**
	 * 
	 * @return
	 */
	public List<CityBean> getCity() {
		List<CityBean> list = new ArrayList<CityBean>();
		CityBean cityBean = new CityBean();
		cityBean.setId("1");
		cityBean.setName("bj");
		list.add(cityBean);
		CityBean cityBean1 = new CityBean();
		cityBean1.setId("2");
		cityBean1.setName("sh");
		list.add(cityBean1);
		CityBean cityBean2 = new CityBean();
		cityBean2.setId("3");
		cityBean2.setName("天津");
		list.add(cityBean2);
		CityBean cityBean3 = new CityBean();
		cityBean3.setId("4");
		cityBean3.setName("重庆");
		list.add(cityBean3);
		CityBean cityBean4 = new CityBean();
		cityBean4.setId("5");
		cityBean4.setName("广州");
		list.add(cityBean4);
		CityBean cityBean5 = new CityBean();
		cityBean5.setId("6");
		cityBean5.setName("深圳");
		list.add(cityBean5);
		CityBean cityBean6 = new CityBean();
		cityBean6.setId("7");
		cityBean6.setName("南京");
		list.add(cityBean6);
		CityBean cityBean7 = new CityBean();
		cityBean7.setId("8");
		cityBean7.setName("济南");
		list.add(cityBean7);
		CityBean cityBean8 = new CityBean();
		cityBean8.setId("9");
		cityBean8.setName("杭州");
		list.add(cityBean8);
		CityBean cityBean9 = new CityBean();
		cityBean9.setId("10");
		cityBean9.setName("苏州");
		list.add(cityBean9);
		return list;
	}

	public String toJoson(String query) {
		List<CityBean> list = getCity();
		List<CityBean> list2 = search(query, list);
		//JsonConfig jsonConfig = new JsonConfig();
		JSONArray jsonArray = JSONArray.fromObject(list2);
		String json = jsonArray.toString();
		return json;
	}

	public List<CityBean> search(String name, List<CityBean> list) {
		List<CityBean> results = new ArrayList<CityBean>();
		Pattern pattern = Pattern.compile(name, Pattern.CASE_INSENSITIVE);
		for (int i = 0; i < list.size(); i++) {
			Matcher matcher = pattern.matcher(((CityBean) list.get(i))
					.getName());
			if (matcher.find()) {
				results.add(list.get(i));
			}
		}
		return results;
	}
}

   CityBean 在这里就不贴了

   运行效果

 

 我这里项目中需要多列 所以用了multiple: true, 这个属性,如下效果

 

这里我发现这个控件一写问题:

1
比如第二个记录南京,前面会有一个空格 (有兴趣的朋友可以仔细跑一下发现这个问题,后面第二 第三个 以及后续的数据都会有空格,用SPLIT 分割取得数据的时候一定要注意TRIM了)

2

下面运行提示后用鼠标点击或者回车选中响应 鼠标和回车事件(没有问题)

IE下面firefox 只能用回车选中,用鼠标选中后,数据会乱如下效果 (官网的DEMO也有类似问题):


写好DEMO 觉的挺容易的马上移植项目中,结果又遇到不少的问题

1 系统中用了prototype.js  在加入jquery.js 页面效果出不来,后来找到问题了prototype.js  和jquery.js冲突

   官网下载的jquery.js 是1.2.6版本的,网上有说法改写jquery 的$结果没搞定,后来升级jquery.js 1.4.2 问题解决

2我们系统中用了sitemesh 做装饰,页面头尾都不需要关心的,autoComplete.jsp 返回的结果不是JSON 后又给装饰后加了头尾HTML 数据流了,这样autoComplete控件就无效了

一定要确定在服务端返回的数据流最终 是JSON 格式数据

 

 

总结:项目中往往和简单的DEMO 在运行环境和其他。。又不同的地方,需要具体问题具体分析解决之

 

  • 大小: 6.5 KB
  • 大小: 6.3 KB
  • 大小: 4.5 KB
分享到:
评论

相关推荐

    jquery的autocomplete(自动补全)插件

    **jQuery的Autocomplete插件**是用于实现网页输入框自动补全功能的一种高效解决方案,它极大地提升了用户体验,尤其是在用户需要从大量数据中选择时。这个插件是基于jQuery库的,因此,首先需要确保在项目中引入了...

    jQuery自动完成插件autocomplete.zip

    在标题"jQuery自动完成插件autocomplete.zip"中,我们了解到这是一个基于jQuery库的插件,主要功能是实现自动完成效果。描述中提到的zip文件包含的是该插件的核心组件。 jQuery库是JavaScript的一个轻量级框架,它...

    ASP.NET用JQuery插件实现的AutoComplete

    在这个实例中,我们将探讨如何在ASP.NET中使用jQuery插件实现AutoComplete功能,这是一种常见的输入提示技术,可以提升用户输入效率。 AutoComplete通常用于TextBox控件,当用户在输入框中键入文字时,系统会根据已...

    jquery插件-autocomplete

    **jQuery Autocomplete插件详解** 在前端开发中,jQuery库为我们提供了丰富的功能和简便的API,使得网页交互变得更加便捷。而jQuery Autocomplete插件则是一个非常实用的工具,它能够帮助用户在输入框中实现自动...

    Jquery autocomplete插件使用

    接下来,我们将深入探讨jQuery Autocomplete插件的使用方法、配置选项、事件和数据源。 **1. 安装与引入** 首先,确保已经安装了jQuery和jQuery UI库。如果你还没有,可以通过CDN链接或者下载到本地项目中。引入所...

    jquery自动补全插件(jquery autocomplete)

    在压缩包中的 `jquery.autocomplete使用方法.txt` 文件,应该包含了详细的使用示例和代码解释,你可以参考这个文件来了解如何在实际项目中应用 AutoComplete 插件。 ### 6. 扩展功能 jQuery AutoComplete 还支持...

    jQuery plugin for autocomplete - jQuery自动完成插件

    jQuery plugin for autocomplete - jQuery自动完成插件

    jquery autocomplete下载.rar

    jQuery Autocomplete 是一个非常实用的插件,它为网页表单输入框提供了自动补全功能,极大地提升了用户体验。这个压缩包“jquery autocomplete下载.rar”包含了实现这一功能所需的基本文件,包括样式表、HTML 模板、...

    jquery-autocomplete

    `jQuery-autocomplete` 是一个基于 jQuery 的开源插件,用于实现自动补全功能。这个插件使得在网页表单输入框中快速、高效地提供下拉建议变得简单易行,提高了用户界面的交互性和用户体验。它广泛应用于搜索引擎、...

    jquery.autocomplete.js使用示例,可直接运行

    **jQuery Autocomplete.js 插件使用详解** jQuery Autocomplete.js 是一个非常实用的插件,它为HTML输入框提供了自动补全功能,极大地提升了用户体验。这个插件基于jQuery库,结合Ajax技术,能够实时从服务器获取...

    jquery.autocomplete.js资源压缩包下载

    `jquery.autocomplete.js`是jQuery的一个插件,它扩展了原生的jQuery库,增加了自动完成的功能。这个插件主要由两个核心部分组成:一个是前端展示部分,负责渲染和展示联想结果;另一个是数据处理部分,用于获取和...

    前端项目-jquery.devbridge-autocomplete.zip

    1. **jQuery库**:jQuery是一个广泛使用的JavaScript库,简化了DOM操作、事件处理、动画效果和Ajax交互。在这个项目中,jQuery提供了基础框架,使得实现自动补全功能更为简便。 2. **自动完成(Autocomplete)**:...

    jquery-autocomplete 自动填充插件参数使用说明

    《jQuery Autocomplete 插件参数使用详解》 在Web开发中,为了提升用户体验,自动填充(Autocomplete)功能被广泛应用于搜索框、表单输入等场景。jQuery库提供了一个强大的Autocomplete插件,名为jQuery UI ...

    jquery 自动完成 Autocomplete

    在本篇讨论中,我们将深入理解jQuery的Autocomplete插件,以及如何在实际项目中应用。 ### 1. jQuery UI Autocomplete jQuery UI库提供了Autocomplete组件,它是基于jQuery核心功能构建的。要使用这个组件,首先...

    jquery.ui.autocomplete 扩展:无限下拉

    它可能包含了对原始Autocomplete插件的扩展函数,如`_create`、`_renderMenu`等方法的重写,以及添加了滚动事件的监听和处理。 总的来说,实现jQuery UI Autocomplete的无限滚动扩展是一项涉及前端数据加载策略、...

    jquery Autocomplete插件,搜索自动完成

    jQuery plugin: Autocomplete 参数及实例 官网:jQuery plugin: Autocomplete 此插件依赖于 jquery 1.2.6 --- jquery 1.8.3 转自:http://www.cnblogs.com/duanhuajian/p/3398904.html

    jQuery AutoComplete使用实例

    **jQuery AutoComplete 使用详解** jQuery AutoComplete 是一个非常流行的 jQuery 插件,它为输入框提供了自动补全功能,能够极大地提升用户体验。这个插件基于 jQuery 库,因此需要先引入 jQuery 才能使用。在本文...

    jquery-ui-autocomplete.zip

    在写一个输入框提示内容的功能时,找到了jQuery autocomplete自动补齐这个插件,如获至宝,但是从网上下载后自己用起来总是出问题,原来他只匹配jQuery1.7以下的版本,但是我的其他插件要用jQuery3的版本,这时候就...

    Jquery插件的使用--AutoComplete

    首先,使用jQuery AutoComplete插件前,你需要引入必要的文件。这包括jQuery核心库、AutoComplete插件的JavaScript文件以及对应的CSS样式文件。这些文件可以从jQuery官方网站下载。在HTML中,你需要添加以下引用: ...

    Jquery AutoComplete 使用demo

    jQuery AutoComplete 是一个非常流行的 jQuery 插件,它为输入框提供了自动补全的功能,广泛应用于网页表单、搜索框等场景,以提高用户体验。这个插件允许开发者从本地数组或通过异步方式从服务器获取数据,实现动态...

Global site tag (gtag.js) - Google Analytics