Jquery 自动完成

仲崇峰 2015-06-02

JSON: JavaScript对象表示法(JavaScript Object Notation)
JSON 是存储和交换文本信息的语法。类似于XML
JSON比XML更小,更快,更易解析
------------------------------------------------------------------------------
例子1
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Hello Autocomplete</title>
    <script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
    <script type="text/javascript" src="js/jquery.autocomplete.js"></script>
    <link rel="Stylesheet" href="js/jquery.autocomplete.css" />
    <script type="text/javascript">
        var emails = [
            { name: "Peter Pan", to: "[email protected]" },
            { name: "Molly", to: "[email protected]" },
            { name: "Forneria Marconi", to: "[email protected]" },
            { name: "Master <em>Sync</em>", to: "[email protected]" },
            { name: "Dr. <strong>Tech</strong> de Log", to: "[email protected]" },
            { name: "Don Corleone", to: "[email protected]" },
            { name: "Mc Chick", to: "[email protected]" },
            { name: "Donnie Darko", to: "[email protected]" },
            { name: "Quake The Net", to: "[email protected]" },
            { name: "Dr. Write", to: "[email protected]" },
            { name: "GG Bond", to: "[email protected]" },
            { name: "Zhuzhu Xia", to: "[email protected]" }
        ];

            $(function() {
                $('#keyword').autocomplete(emails, {
                    max: 8, 
                    minChars: 0,
                    width: 400, 
                    scrollHeight: 300,
                    matchContains: true,
                    autoFill: false,
                    formatItem: function(row, i, max) {
                        return i + '/' + max + ':"' + row.name + '"[' + row.to + ']';
                    },
                    formatMatch: function(row, i, max) {
                        return row.name + row.to;
                    },
                    formatResult: function(row) {
                        return row.to;
                    }
                }).result(function(event, row, formatted) {
                    alert(row.to);
                });
            });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="keyword" />
        <input id="getValue" value="GetValue" type="button" />
    </div>
    </form>
</body>
</html>

------------------------------------------------------------------------------
例子2
$(function(){
	var url = "../jsonTreeData/issueCustodianDataAction!getIssueCustodian.action";
		$("#issueCustodian").autocomplete(url,{
			max : 30,
			minChars : 0,
			cacheLength : 0,
			width:120,
			mustMatch : true,
			dataType:"json",
			extraParams : {
				"issueCustodian.code" : function(){
					var issueCustCode = $("#issueCustodian").val();
					if(issueCustCode.indexOf("-") != -1){
						issueCustCode = fundCodeValue.split("-")[0];
					}
					return encodeURI(issueCustCode);
				},
				"jsonSerializeParams" : "code;name"
			},
		parse: function(data){
			var rows = [];  
			if(data == null){
				return rows;
			}
			var d = eval("("+data+")");  
			for(var i=0; i<d.length; i++){
			 rows[rows.length] = {
			   data:d[i], //每条数据对象 
			   value:$.trim(d[i].code)+"-"+$.trim(d[i].name), //与输入的值比较的数据
			   result:$.trim(d[i].code)+"-"+$.trim(d[i].name)  //选中的实际数据
			 };
			}  
			return rows;  
		}, 
		formatItem: function(row, i, max) {
			return  $.trim(row.code)+"-"+$.trim(row.name);
		}
	});	
});

minChars(number):
该参数指定在触发autocomplete之前用户在查询框中输入的最小字符数,通常设置为1,
即文本框值不为空的时候执行autocomplete,如果取值为0,则在用户双击查询文本框或删除文本框内容时查询

width:
该参数的用途是指定下拉框的宽度,通常不用设置,默认的值为和<input>元素相同

max:
查询时下拉列表框中显示的条目数,defaultValue为10 

delay
击键后激活autoComplete的延迟时间(单位毫秒).Default: 远程为400 本地10

autoFile(boolean)
是否在用户选择时自动将用户鼠标所在的值填充到input元素中,default:false

mustMatch(boolean)
参数boolean类型,true时,如果输入的查询条件无法匹配到合适的结果,
则<input>元素中输入的查询值会自动清空,否则会保留。Default:false


selectFirst(boolean)
参数为true时,则用户按下tab键或者return键时会自动将查询结果的第一条记录选中到input元素中 

cacheLength(number)
缓存记录的条数,即从数据库中取得记录要缓存多少条,1为不缓存,defalut:10

matchSubset(boolean)    
是否对从服务器的查询结果使用缓存,比如:上一次的搜索关键字为java,
则下次再次输入java进行查询时不用再次连接服务器查询,
而是从缓存中取得上次查询的结果,这样做可以减少访问服务器的次数,提供性能。Default:true

matchCase(boolean)
是否开启大小写敏感开关,在使用缓存时比较重要

multiple(boolean)
是否允许多值查询,如果为true,则查询到第一条结果后,再次输入查询条件则会后续的查询结果显示出来。

multipleSeparator(string)
只有在multiple属性设置为true时此属性才能生效,该属性用来控制在多条件查询时使用的分隔符,default:”,”

scroll(boolean)
设置当结果集大于默认高度时是否使用滚动条显示,default:true

scrollHeight(number)
查询结果框的显示高度,当超过该高度时会使用scroll 

formatItem(Function)
对服务器返回的每一行数据都调用该函数来处理,返回值将用LI元素包含显示在下拉列表中,
autocomplete会提供三个参数(row,I,max)
其中row表示服务器端返回回来的结果数组,
i为当前的行数(正在处理第几行数据),
max为返回的记录总数(查询到的结果总数),default:none,不指定则直接返回服务器的结果值

formatResult(Function)
功能和formatItem基本类似,同样有三个参数作用相同,
暂时没发现写该与不写该函数有什么区别 


formatMatch(Function)
对每一行数据使用此函数格式化需要查询的数据格式. 返回值是给内部搜索算法使用的. 参数值row 

extraParams (Object):  为服务器端后台提供更多的参数,
参数的形式如下:{name:lixiao},在向后台传递参数时会自动在url后追加该参数?name=lixiao

matchContains (Boolean) 
决定比较时是否要在字符串内部查看匹配,如ba是否与foo bar中的ba匹配.使用缓存时比较重要.

autoFill (Boolean)
要不要在用户选择时自动将用户当前鼠标所在的值填入到input框,Default: false 


formatResult (Function) 
和formatItem类似,但可以将将要输入到input文本框内的值进行格式化.同样有三个参数,和formatItem一样.
Default: none,表示要么是只有数据,要么是使用formatItem提供的值.


.result(function(event, row, formatted) {alert(row.to);

result (handler) Returns:jQuery 
此事件会在用户选中某一项后触发,参数为: 
event: 事件对象. event.type为result. 
data: 选中的数据行. 
formatted:formatResult函数返回的值

相关推荐

Web全栈笔记 / 0评论 2020-06-15