/** * @author: 一只拖鞋 (Email: [email protected]) * * 基于jQuery的类似Google搜索的提示列表 * 调用方式:$(input).tips(options); * options: 参数选项 * url JOSN 获取URL地址 * param 获取JOSN数据时提交的参数名 * leftText 提示列表左边显示文字的JSON字段 * rightText 提示列表右边显示文字的JSON字段 * inputText 点击提示列表后显示在输入框内容的JSON字段 * rightTextLength: 50, // 右边数字最长的长度 * leftTextLength:50, // 左边数字最长的长度 * * hiddenId 隐藏域id 可选 * hiddenText 隐藏域值 可选 * width 提示列表宽度,可选(超宽时自动加宽, 默认为300) * selectClass 选中样式 * * 要求返回的JSON数据格式为: * [{key:value,key:value...},{key:value,key:value...},...] * * 支持:IE, Firefox * @version: 1.0 * 初始版本 * * @version: 2.0 * 修复问题:1、禁止浏览器自动完成功能 * 2、修复与其它JS兼容问题 * 3、鼠标经过时显示手状图 * @version: 2.1 * 修复问题:按回车无效,已修改 * 添加功能:左边及右边字数显示的限制,默认为20个字/字符 */ (function($){ $.tips = function(input, options){ var $input = $(input); var $tipsList = $("#tips-list-div-" + $input.attr("id")); var $hiddenTips = $("#tips-list-hidden-div-" + $input.attr("id")); $input.attr({"autocomplete":"off"}); // 禁止浏览器自动完成功能 $input.focus(function(e){ getData(e); }); $input.blur(function(){ setTimeout("jQuery('#tips-list-div-" + $input.attr("id")+"').slideUp('slow')", 100); }); $input.keydown(processKey); $input.keyup(getData); function processKey(e) { if (testSpeKey(e) && ($tipsList.is(':visible') || getCurrentSelect())) { if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); e.cancelBubble = true; e.returnValue = false; switch(e.keyCode) { case 38: // up prevSelect(); break; case 40: // down nextSelect(); break; case 13: // 回车 selectCurrent(); break; } } } // 当前选中的li function getCurrentSelect() { if (!$tipsList.is(':visible')) return false; var $currentSelect = $tipsList.children('ul').children('li.'+options.selectClass); if (!$currentSelect.length) $currentSelect = false; return $currentSelect; } // 将当前选中li返回到 input 中 function selectCurrent() { $currentSelect = getCurrentSelect(); if ($currentSelect) { $input.val($currentSelect.attr("inputText")); if($currentSelect.attr("hidenId")!=undefined && $currentSelect.attr("hidenId")!=null && $currentSelect.attr("hidenId")!=""){ $("#"+$currentSelect.attr("hidenId")).val($currentSelect.attr("hiddenText")); } hiddenTips(); $input.blur(); } } // 向下选择 function nextSelect() { $currentSelect = getCurrentSelect(); if ($currentSelect) $currentSelect.removeClass(options.selectClass).next().addClass(options.selectClass); else $tipsList.children('ul').children('li:first-child').addClass(options.selectClass); } // 向上选择 function prevSelect() { $currentResult = getCurrentSelect(); if ($currentResult) $currentResult.removeClass(options.selectClass).prev().addClass(options.selectClass); else{ $tipsList.children('ul').children('li:last-child').addClass(options.selectClass); } } // 测试是否 特殊键 function testSpeKey(e){ // handling up/down/escape requires results to be visible // handling enter/tab requires that AND a result to be selected if (/27$|38$|40$/.test(e.keyCode) || /^13$|^9$/.test(e.keyCode)) { return true; } } // 通过AJAX获取json数据 function getData(e){ if(testSpeKey(e)){ return; } if($input.val()!=""){ var param = options.param; $.ajax({ type: "POST", url: options.url, data: options.param+"="+$input.val(), success: function(data){ displayDiv(eval(data)); } }); }else{ hiddenTips(); } } // 初始化提示列表 每次AJAX获取数据后调用 function initTips(){ $tipsList.find("ul").find("li").each(function(){ $(this).mouseover(function(){ $(this).addClass(options.selectClass); }); $(this).mouseout(function(){ $(this).removeClass(options.selectClass); }); $(this).click(selectCurrent) }); } // 清除样式 function cleanClass(){ $tipsList.find("ul").find("li").each(function(){ $(this).removeClass(options.selectClass); }); } // 显示提示列表 function showTips(html){ $tipsList.html(html); $hiddenTips.html(html); var offset = $input.offset(); var height = $input.outerHeight(); $tipsList.css("top", offset.top + height); $tipsList.css("left", offset.left); var width = options.width initTips(); $hiddenTips.css("display", "block"); $hiddenTips.find("li").each(function(){ var span = $(this).find("span"); var width1 = $(span[0]).width() + $(span[1]).width() + 20; var width2 = $(this).width() + 20; var maxWidth = width1>width2?width1:width2; width = width>maxWidth?width:maxWidth; }); $hiddenTips.css("display", "none"); $tipsList.width(width); $tipsList.slideDown("slow"); } // 隐藏提示列表 function hiddenTips(){ $tipsList.slideUp("slow"); } // 将JOSN数据生成DIV function displayDiv(json){ var div = "
.tips-div {background:#fff;border:1px solid #7f9db9;position: absolute;display: none;margin:0px;padding:1px;} .tips-div ul{margin:0px;padding:0px;list-style:none;cursor:pointer;} .tips-div li{margin:0px;line-height:25px; height:25px; color:#05a; padding:1px 3px;} .tips-div li span.left{margin:0px;padding:0px;float:left;display:block;} .tips-div li span.right{margin:0px;padding:0px;float:right;color:green;display:block;text-align:left;} .tips-div-hover{background:#c8e3fc;}
[ {id:1,text:"11111111111111111111111111111111",text2:"ttttttt1"}, {id:2,text:"2222222222222222222222222222222222",text2:"ttttttt2"}, {id:3,text:"33333333333333333",text2:"ttttttt3"}, {id:4,text:"444444444444444444444444",text2:"t4"}, {id:5,text:"55555555555555555555555555",text2:"t5"}, {id:6,text:"6666666666666666666666666666",text2:"t6"}, {id:7,text:"7777777777777777777777777777777777777",text2:"ttttttttttttt7"}, {id:8,text:"88888888888888888888888888",text2:"t8tttttt"}, {id:9,text:"9999999999999999",text2:"t9"}, {id:0,text:"000000000000000000",text2:"t0tttttttttttt"} ]
/** * action 返回JSON数据格式 **/ {"results":[{"name":"000000000270","id":"0"}]}