jQuery AutoComplete实现
来源:互联网 发布:低头族车祸数据 编辑:程序博客网 时间:2024/05/16 17:26
注:该插件是在"VictorLi"所写的AutoComplete的基础上改进的,特此说明!
原文地址:http://www.oschina.net/code/snippet_102776_3656
本人平时是用的easyui开发,但恼火的是easyui没有autoComplete功能插件,虽然有一个combobox能在页面实现该功能,但是只适用于少量静态数据,不能动态查询。而jQuery UI提供了该功能,但是又不能跟easyui兼容,所以本人找到了"VictorLi"写的这个插件,但是使用后发现还是有很多地方有bug而且没有提供demo,所以自己整理了下发出来,希望对遇到该情况的朋友有点帮助
该插件使用起来很方便,几行代码即可,需要修改源码的朋友注意看注释
demo
JS部分:
$("#input_id").zhAutoComplete({url : 'test.do',format : ['NAME', 'ID'],maxLength : 6});
HTML部分:
<input type="text" id="input_id" style="width: 120px;">
源码:
/** * 简单实用的支持中文的自动完成插件 * * @param url * 获得数据的URL * @param q * 查询用关键字名称 * @param boxId * 外边框ID * @param tblId * 内表格ID * @param format * 返回数据格式,默认为null,如返回JSON数据为[{id:'aaa',name:'ccccc'}] * format:['name','id'],其中第一个项会作为text显示出来,其它项会作为afterSelect中对象属性 * @param processData * 对返回的数据进行预处理 最后 return 处理过的数据即可 * @param showList * 如何显示数据 * @param select * 选中一条记录时触发 * @param afterSelect * 选中一条记录后触发 * @param rowHeight * 行高 * @param maxLength * 最大行数 * @param zIndex * 层的zIndex属性,防止被其他层覆盖 * * @example * $("#input_id").zhAutoComplete({url:'test.php'}); * * @example * override actions * $("#input_id").zhAutoComplete({url:'test.php',processData:function(data}{},afterSelect: * function(td){td.id ....}); */jQuery.fn.zhAutoComplete = function(options) {var keyWordOld = null;var input = $(this);$(input).attr("autocomplete", "off");var offset = {};offset.width = $(this).width();var settings = {url : 'test.php',q : 'name',format : null,maxLength : 10,type : 'json',boxId : '_zhAC_Box',zIndex : 10,tblId : '_ZhAC_Table',offset : offset,rowHeight : 18,processData : function(data) {return data;},showList : function(data) {if ($("#" + settings.boxId).length > 0)$("#" + settings.boxId).remove();if (data.length == 0)return;var top = document.getElementById(input[0].id).getBoundingClientRect().top;var left = document.getElementById(input[0].id).getBoundingClientRect().left;var width = settings.offset.width - 1;var box = $("<div id='" + settings.boxId + "'></div>");var table = $("<table id='" + settings.tblId + "' style='font-size: 12px;font-family: \"宋体\";'></table>");if (data.length > settings.maxLength) {$(box).css({'background-color' : '#FFFFFF',position : 'absolute',border : '1px solid #817F82','z-index' : settings.zIndex,top : top + $(input).height() + 5,left : left,width : width + 1,height : settings.maxLength * settings.rowHeight,'overflow-y' : 'auto'});} else {$(box).css({'background-color' : '#FFFFFF',position : 'absolute',border : '1px solid #817F82','z-index' : settings.zIndex,top : top + $(input).height() + 5,left : left,width : width + 1});}$(table).attr("cellpadding", 2).attr("cellspacing", 0).attr("width", "100%").attr("border", 0);for (i = 0; i < data.length; i++) {var tr = $("<tr></tr>");tr.css({cursor : 'pointer','padding-top' : '2px','padding-buttom' : '2px'});if (settings.format) {var td = $("<td style='padding-left:5px;'>"+ data[i][settings.format[0]] + "</td>");for (j = 1; j < settings.format.length; j++) {$(td).attr(settings.format[j],data[i][settings.format[j]]);}} else {var td = $("<td style='padding-left:5px;'>" + data[i]+ "</td>");}$(tr).append(td);$(table).append(tr);}$(box).append(table);$("body").append(box);$("#" + settings.tblId + " tr").bind("mouseover", function() {$(this).css("background-color", "#E2EAFF")}).bind("mouseout", function() {$(this).css("background-color", "#FFFFFF")});$("#" + settings.tblId + " tr td").bind("click", function() {keyWordOld = $(this).text();});$("#" + settings.tblId + " tr td").bind("click",settings.selectParam);$(document).bind("click", function() {$(box).remove()});},selectParam : function() {$(input).val($(this).text());settings.afterSelect($(this));},afterSelect : function(td) {console.log("calling afterSelect function...");}};options = options || {};$.extend(settings, options);$(this).bind("keyup", function(event) {if (event.keyCode >= 37 && event.keyCode <= 40)return;var keyword = $.trim($(this).val());if (!keyword) {return;} else {if (keyWordOld == keyword) {return;}keyWordOld = keyword;}param = settings.q + "=" + keyword;$.get(settings.url, param, function(data) {var ds = settings.processData(data);settings.showList(ds);}, settings.type);});};
- jQuery AutoComplete实现
- Django & JQuery 实现 Autocomplete
- Django & JQuery 实现 Autocomplete
- Jquery实现类似Google autocomplete
- jQuery autoComplete实现模糊查询
- jquery.autocomplete实现自动补充
- jquery Autocomplete 实现联想查询
- jquery.autocomplete 实现实时查询
- jquery,ajax 实现autocomplete,输入提示
- ashx+jquery+autocomplete.js实现自动填充
- jquery 查找类似autoComplete 实现模糊查询
- jQuery.Autocomplete实现自动完成功能(详解)
- jQuery Autocomplete php 实现自动补齐
- jQuery.Autocomplete实现自动完成功能
- jquery autocomplete 怎样实现动态绑定
- JQuery autocomplete ajax 实现自动完成
- JQuery autocomplete ajax 实现自动完成
- jQuery.Autocomplete实现自动完成参数详解
- Android学习笔记之AndroidManifest.xml文件解析
- 关于Oracle安装程序和补丁要知道的一些知识[收集中]
- VC程序Debug版本和Release版本运行不一致问题
- 人生轨迹、贵在坚持
- listbos二级联动
- jQuery AutoComplete实现
- PHP ServerPush (推送) 技术的探讨
- 硬件,网络,系统知识合集
- jquery和js操作属性
- 创建LVM报错:Can't initialize physical volume "/dev/cciss/c0d1p1" of volume group"VolGroup01" without -ff
- 利用CSS、JavaScript及Ajax实现图片预加载方法
- 问题解决:listview多次调用addHeaderView和addFooterView
- 将无线网卡改成WIFI热点( by quqi99 )
- iOS 7: 如何为iPhone 5S编译64位应用。