Jquery Autocomplete 实例教程

web项目填写表单时候select选项经常会有特别多,这时可以考虑使用Jquery Autocomplete插件,它能根据条件很好的定位指定选项。博主为了优化此类现象,运用了自动完成插件,在这里博主将结合实例分享给大家,也好自己做备份。

描述:自动完成功能根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择。

参考:博主用的是jquery-autocomplete-1.1.js版本,检索内容由于是固定的所以定义了枚举类来封装数据源(如果检索内容在数据库中需要自己定义缓存,并且根据需要还有可能需要数据库和缓存同步操作。),如下:

public enum NationType {
	ASIA("AP", "Asia/Pacific Region"),
	EUROPE("EU", "Europe"),
	ANDORRA("AD", "Andorra"),
	EMIRATES("AE", "United Arab Emirates"),
	AFGHANISTAN("AF", "Afghanistan"),
	BARBUDA("AG", "Antigua and Barbuda"),
	ANGUILLA("AI", "Anguilla"),
	ALBANIA("AL", "Albania"),
	ARMENIA("AM", "Armenia"),
	ANTILLES("AN", "Netherlands Antilles"),
	ANGOLA("AO", "Angola"),
	ANTARCTICA("AQ", "Antarctica"),
	ARGENTINA("AR", "Argentina"),
	AMERICANSAMOA("AS", "American Samoa"),
	AUSTRIA("AT", "Austria"),
	AUSTRALIA("AU", "Australia"),
	ARUBA("AW", "Aruba"),
	AZERBAIJAN("AZ", "Azerbaijan"),
	HERZEGOVINA("BA", "Bosnia and Herzegovina"),
	BARBADOS("BB", "Barbados"),
	BANGLADESH("BD", "Bangladesh"),
	BELGIUM("BE", "Belgium"),
	FASO("BF", "Burkina Faso"),
	BULGARIA("BG", "Bulgaria"),
	BAHRAIN("BH", "Bahrain"),
	BURUNDI("BI", "Burundi"),
	BENIN("BJ", "Benin"),
	BERMUDA("BM", "Bermuda"),
	DARUSSALAM("BN", "Brunei Darussalam"),
	BOLIVIA("BO", "Bolivia"),
	BRAZIL("BR", "Brazil"),
	BAHAMAS("BS", "Bahamas"),
	BHUTAN("BT", "Bhutan"),
	ISLAND("BV", "Bouvet Island"),
	BOTSWANA("BW", "Botswana"),
	BELARUS("BY", "Belarus"),
	BELIZE("BZ", "Belize"),
	CANADA("CA", "Canada"),
	COCOS("CC", "Cocos (Keeling) Islands"),
	CONGODEM("CD", "Congo, The Democratic Republic of the "),
	CENTRAL("CF", "Central African Republic"),
	CONGO("CG", "Congo"),
	SWITZERLAND("CH", "Switzerland"),
	DIVOIRE("CI", "Cote D'Ivoire"),
	COOK("CK", "Cook Islands"),
	CHILE("CL", "Chile"),
	CAMEROON("CM", "Cameroon"),
	CHINA("CN", "China"),
	COLOMBIA("CO", "Colombia"),
	COSTARICA("CR", "Costa Rica"),
	CUBA("CU", "Cuba"),
	CAPEVERDE("CV", "Cape Verde"),
	CHRISTMAS("CX", "Christmas Island"),
	CYPRUS("CY", "Cyprus"),
	CZECH("CZ", "Czech Republic"),
	GERMANY("DE", "Germany"),
	DJIBOUTI("DJ", "Djibouti"),
	DENMARK("DK", "Denmark"),
	DOMINICA("DM", "Dominica"),
	DOMINICAN("DO", "Dominican Republic"),
	ALGERIA("DZ", "Algeria"),
	ECUADOR("EC", "Ecuador"),
	ESTONIA("EE", "Estonia"),
	EGYPT("EG", "Egypt"),
	WESTERN("EH", "Western Sahara"),
	ERITREA("ER", "Eritrea"),
	SPAIN("ES", "Spain"),
	ETHIOPIA("ET", "Ethiopia"),
	FINLAND("FI", "Finland"),
	FIJI("FJ", "Fiji"),
	FALKLAND("FK", "Falkland Islands (Malvinas)"),
	MICRONESIA("FM", "Micronesia, Federated States of"),
	FAROE("FO", "Faroe Islands"),
	FRANCE("FR", "France"),
	Metropolitan("FX", "France, Metropolitan"),
	GABON("GA", "Gabon"),
	KINGDOM("GB", "United Kingdom"),
	GRENADA("GD", "Grenada"),
	GEORGIA("GE", "Georgia"),
	GUIANA("GF", "French Guiana"),
	GHANA("GH", "Ghana"),
	GIBRALTAR("GI", "Gibraltar"),
	GREENLAND("GL", "Greenland"),
	GAMBIA("GM", "Gambia"),
	GUINEA("GN", "Guinea"),
	GUADELOUPE("GP", "Guadeloupe"),
	EQUATORIALGUINEA("GQ", "Equatorial Guinea"),
	GREECE("GR", "Greece"),
	SOUTHGEORGIA("GS", "South Georgia and the South Sandwich Islands"),
	GUATEMALA("GT", "Guatemala"),
	GUAM("GU", "Guam"),
	BISSAU("GW", "Guinea-Bissau"),
	GUYANA("GY", "Guyana"),
	HONGKONG("HK", "Hong Kong"),
	HEARDMCDONALD("HM", "Heard Island and McDonald Islands"),
	HONDURAS("HN", "Honduras"),
	CROATIA("HR", "Croatia"),
	HAITI("HT", "Haiti"),
	HUNGARY("HU", "Hungary"),
	INDONESIA("ID", "Indonesia"),
	IRELAND("IE", "Ireland"),
	ISRAEL("IL", "Israel"),
	INDIA("IN", "India"),
	BRITISHINDIAN("IO", "British Indian Ocean Territory"),
	IRAQ("IQ", "Iraq"),
	ISLAMIC("IR", "Iran, Islamic Republic o"),
	ICELAND("IS", "Iceland"),
	ITALY("IT", "Italy"),
	JAMAICA("JM", "Jamaica"),
	JORDAN("JO", "Jordan"),
	JAPAN("JP", "Japan"),
	KENYA("KE", "Kenya"),
	KYRGYZSTAN("KG", "Kyrgyzstan"),
	CAMBODIA("KH", "Cambodia"),
	KIRIBATI("KI", "Kiribati"),
	COMOROS("KM", "Comoros"),
	SAINT("KN", "Saint Kitts and Nevis"),
	KOREADEMOCRATIC("KP", "Korea, Democratic People's Republic of"),
	KOREAREPUBLIC("KR", "Korea, Republic of "),
	KUWAIT("KW", "Kuwait"),
	CAYMAN("KY", "Cayman Islands"),
	KAZAKSTAN("KZ", "Kazakstan"),
	LAO("LA", "Lao People's Democratic Republic"),
	LEBANON("LB", "Lebanon"),
	SAINTLUCIA("LC", "Saint Lucia"),
	LIECHTENSTEIN("LI", "Liechtenstein"),
	SRILANKA("LK", "Sri Lanka"),
	LIBERIA("LR", "Liberia"),
	LESOTHO("LS", "Lesotho"),
	LITHUANIA("LT", "Lithuania"),
	LUXEMBOURG("LU", "Luxembourg"),
	LATVIA("LV", "Latvia"),
	JAMAHIRIYA("LY", "Libyan Arab Jamahiriya"),
	MOROCCO("MA", "Morocco"),
	MONACO("MC", "Monaco"),
	MOLDOVA("MD", "Moldova, Republic of "),
	MADAGASCAR("MG", "Madagascar"),
	MARSHALL("MH", "Marshall Islands"),
	MACEDONIA("MK", "Macedonia, the Former Yugoslav Republic of"),
	MALI("ML", "Mali"),
	MYANMAR("MM", "Myanmar"),
	MONGOLIA("MN", "Mongolia"),
	MACAU("MO", "Macau"),
	NORTHERNMARIANA("MP", "Northern Mariana Islands"),
	MARTINIQUE("MQ", "Martinique"),
	MAURITANIA("MR", "Mauritania"),
	MONTSERRAT("MS", "Montserrat"),
	MALTA("MT", "Malta"),
	MAURITIUS("MU", "Mauritius"),
	MALDIVES("MV", "Maldives"),
	MALAWI("MW", "Malawi"),
	MEXICO("MX", "Mexico"),
	MALAYSIA("MY", "Malaysia"),
	MOZAMBIQUE("MZ", "Mozambique"),
	NAMIBIA("NA", "Namibia"),
	NEWCALEDONIA("NC", "New Caledonia"),
	NIGER("NE", "Niger"),
	NORFOLK("NF", "Norfolk Island"),
	NIGERIA("NG", "Nigeria"),
	NICARAGUA("NI", "Nicaragua"),
	NETHERLANDS("NL", "Netherlands"),
	NORWAY("NO", "Norway"),
	NEPAL("NP", "Nepal"),
	NAURU("NR", "Nauru"),
	NIUE("NU", "Niue"),
	NEWZEALAND("NZ", "New Zealand"),
	OMAN("OM", "Oman"),
	PANAMA("PA", "Panama"),
	PERU("PE", "Peru"),
	POLYNESIA("PF", "French Polynesia"),
	NEWGUINEA("PG", "Papua New Guinea"),
	PHILIPPINES("PH", "Philippines"),
	PAKISTAN("PK", "Pakistan"),
	POLAND("PL", "Poland"),
	PIERREMIQUELON("PM", "Saint Pierre and Miquelon"),
	PITCAIRN("PN", "Pitcairn"),
	PUERTORICO("PR", "Puerto Rico"),
	PALESTINIAN("PS", "Palestinian Territory, Occupied"),
	PORTUGAL("PT", "Portugal"),
	PALAU("PW", "Palau"),
	PARAGUAY("PY", "Paraguay"),
	QATAR("QA", "Qatar"),
	REUNION("RE", "Reunion"),
	ROMANIA("RO", "Romania"),
	RUSSIAN("RU", "Russian Federation"),
	RWANDA("RW", "Rwanda"),
	ARABIA("SA", "Saudi Arabia"),
	SB("SB", "SB"),
	SEYCHELLES("SC", "Seychelles"),
	SUDAN("SD", "Sudan"),
	SWEDEN("SE", "Sweden"),
	SINGAPORE("SG", "Singapore"),
	SAINTHELENA("SH", "Saint Helena"),
	SLOVENIA("SI", "Slovenia"),
	SVALBARDJANMAYEN("SJ", "Svalbard and Jan Mayen"),
	SLOVAKIA("SK", "Slovakia"),
	SIERRALEONE("SL", "Sierra Leone"),
	SANMARINO("SM", "San Marino"),
	SN("SN", "SN"),
	SOMALIA("SO", "Somalia"),
	SURINAME("SR", "Suriname"),
	SAOTOMPRINCIPE("ST", "Sao Tome and Principe"),
	ELSALVADOR("SV", "El Salvador"),
	SYRIANARAB("SY", "Syrian Arab Republic"),
	SWAZILAND("SZ", "Swaziland"),
	TURKSCAICOS("TC", "Turks and Caicos Islands"),
	CHAD("TD", "Chad"),
	SOUTHERNTERRITORIES("TF", "French Southern Territories"),
	TOGO("TG", "Togo"),
	THAILAND("TH", "Thailand"),
	TAJIKISTAN("TJ", "Tajikistan"),
	TOKELAU("TK", "Tokelau"),
	TURKMENISTAN("TM", "Turkmenistan"),
	TUNISIA("TN", "Tunisia"),
	TONGA("TO", "Tonga"),
	EASTTIMOR("TP", "East Timor"),
	TURKEY("TR", "Turkey"),
	TRINIDADTOBAGO("TT", "Trinidad and Tobago"),
	TUVALU("TV", "Tuvalu"),
	TAIWAN("TW", "Taiwan"),
	TANZANIA("TZ", "Tanzania, United Republic of"),
	UKRAINE("UA", "Ukraine"),
	UGANDA("UG", "Uganda"),
	MINOROUTLYING("UM", "United States Minor Outlying Islands"),
	UNITEDSTATES("US", "United States"),
	URUGUAY("UY", "Uruguay"),
	UZBEKISTAN("UZ", "Uzbekistan"),
	HOLYSEE("VA", "Holy See (Vatican City State)"),
	GRENADINES("VC", "Saint Vincent and the Grenadines"),
	VENEZUELA("VE", "Venezuela"),
	VIRGINBritish("VG", "Virgin Islands, British"),
	VIRGIN("VI", "Virgin Islands, U.S."),
	VIETNAM("VN", "Vietnam"),
	VANUATU("VU", "Vanuatu"),
	WALLISFUTUNA("WF", "Wallis and Futuna"),
	SAMOA("WS", "Samoa"),
	YEMEN("YE", "Yemen"),
	MAYOTTE("YT", "Mayotte"),
	YUGOSLAVIA("YU", "Yugoslavia"),
	SOUTHAFRICA("ZA", "South Africa"),
	ZAMBIA("ZM", "Zambia"),
	ZAIRE("ZR", "Zaire"),
	ZIMBABWE("ZW", "Zimbabwe"),
	ANONYMOUS("A1", "Anonymous Proxy"),
	SATELLITE("A2", "Satellite Provider"),
	UNKONWN("unknown", "unknown"),
	OTHER("O1", "Other");

	private String code;
	private String name;

	private NationType(String code, String name) {
		this.code = code;
		this.name = name;
	}
	
	public static List<Map<String, String>> getList(String q) {
		List<Map<String, String>> list = new LinkedList<Map<String, String>>();
		for (NationType type : NationType.values()) {
			if (StringUtils.isNotBlank(q)) {
				if (type.getCode().toLowerCase().contains(q.toLowerCase()) || type.getName().toLowerCase().contains(q.toLowerCase())) {
					Map<String, String> map = new HashMap<String, String>();
					map.put("code", type.getCode());
					map.put("name", type.getName());
					list.add(map);
				}
			} else {
				Map<String, String> map = new HashMap<String, String>();
				map.put("code", type.getCode());
				map.put("name", type.getName());
				list.add(map);
			}
		}
		return list;
	}

	/**
	 * Fetch instance by code.
	 * 
	 * @param code
	 * @return
	 */
	public static NationType instanceOf(String code) {
		for (NationType dateType : NationType.values()) {
			if (StringUtils.equals(dateType.getCode(), code)) {
				return dateType;
			}
		}

		return NationType.UNKONWN;
	}

	/**
	 * @return the code
	 */
	public String getCode() {
		return code;
	}

	/**
	 * @param code
	 *            the code to set
	 */
	public void setCode(String code) {
		this.code = code;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name
	 *            the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
}
jquery autocomplete插件由于每次用户输入都需要检索后台所以下面是控制层的代码。

        @ResponseBody
	@RequestMapping(value = "nationtype.xxx")
	public List<Map<String, String>> getInsertInfo(@RequestParam("q") String q) {
		return NationType.getList(q);
	}
最后是前端代码。

<input type="text" id="nationType" name="nationType" />

(function($) {
	Class('Xxx.xxxMain',{
		init:function() {
			this.opt ={rootId:"#root"};
			this.root = $(this.opt.rootId);
			this.initAutoComplete();
		},
		initAutoComplete: function() {
			var acOptions = {
				minChars : 0,
				max : 10,
				mustMatch : true,
				cacheLength : 1,
				multiple : false,
				autoFill : true,
				formatItem: function (row, i, max) {
				    return row.code + " [" + row.name + "]";
				},
				formatResult: function (row, i, max) {
					return row.code;
				}
			};
			$("#nationType").autocomplete("/nationtype.nhn",acOptions);
		},
	});
})(jQuery);
效果图如下。
效果图


Jquery-Autocomplete属性说明
属性类型说明
minCharsNumber在触发autoComplete前用户至少需要输入的字符数.Default: 1,如果设为0,在输入框内双击或者删除输入框内内容时显示列表
widthNumber指定下拉框的宽度. Default: input元素的宽度
maxNumberautoComplete下拉显示项目的个数.Default: 10
delayNumber击键后激活autoComplete的延迟时间(单位毫秒).Default: 远程为400 本地10
autoFillBoolean要不要在用户选择时自动将用户当前鼠标所在的值填入到input框. Default: false
mustMatchBooolean如果设置为true,autoComplete只会允许匹配的结果出现在输入框,所有当用户输入的是非法字符时将会得不到下拉框.Default: false
matchContainsBoolean决定比较时是否要在字符串内部查看匹配,如ba是否与foo bar中的ba匹配.使用缓存时比较重要.不要和autofill混用.Default: false
selectFirstBoolean如果设置成true,在用户键入tab或return键时autoComplete下拉列表的第一个值将被自动选择,尽管它没被手工选中(用键盘或鼠标).当然如果用户选中某个项目,那么就用用户选中的值. Default: true
cacheLengthNumber缓存的长度.即对从数据库中取到的结果集要缓存多少条记录.设成1为不缓存.Default: 10
matchSubsetBooleanautoComplete可不可以使用对服务器查询的缓存,如果缓存对foo的查询结果,那么如果用户输入foo就不需要再进行检索了,直接使用缓存.通常是打开这个选项以减轻服务器的负担以提高性能.只会在缓存长度大于1时有效.Default: true
matchCaseBoolean比较是否开启大小写敏感开关.使用缓存时比较重要.如果你理解上一个选项,这个也就不难理解,就好比foot要不要到FOO的缓存中去找.Default: false
multipleBoolean是否允许输入多个值即多次使用autoComplete以输入多个值. Default: false
multipleSeparatorString如果是多选时,用来分开各个选择的字符. Default: ","
scrollBoolean当结果集大于默认高度时是否使用卷轴显示 Default: true
scrollHeightNumber自动完成提示的卷轴高度用像素大小表示 Default: 180
formatItemFunction为每个要显示的项目使用高级标签.即对结果中的每一行都会调用这个函数,返回值将用LI元素包含显示在下拉列表中. Autocompleter会提供三个参数(row, i, max): 返回的结果数组, 当前处理的行数(即第几个项目,是从1开始的自然数), 当前结果数组元素的个数即项目的个数. Default: none, 表示不指定自定义的处理函数,这样下拉列表中的每一行只包含一个值.
formatResultFunction和formatItem类似,但可以将将要输入到input文本框内的值进行格式化.同样有三个参数,和formatItem一样.Default: none,表示要么是只有数据,要么是使用formatItem提供的值.
formatMatchFunction对每一行数据使用此函数格式化需要查询的数据格式. 返回值是给内部搜索算法使用的. 参数值row
extraParamsObject为后台(一般是服务端的脚本)提供更多的参数.和通常的作法一样是使用一个键值对对象.如果传过去的值是{ bar:4 },将会被autocompleter解析成my_autocomplete_backend.php?q=foo&bar=4 (假设当前用户输入了foo). Default: {}
resulthandler此事件会在用户选中某一项后触发,参数为:event: 事件对象. event.type为result.data: 选中的数据行.formatted:formatResult函数返回的值.例如:$("#singleBirdRemote").result(function(event, data, formatted) {});//如选择后给其他控件赋值,触发别的事件等等





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值