jsonsuggest是一个不错的js插件,可以实现模糊联想查询,效果如图,
客户体验还是不错,不过我也是弄了一两天,基于我同事修改过的源码之上,我还修改了源码
(function($) {
$.fn.jsonSuggest = function(searchData, settings) {
var defaults = {
minCharacters : 1,
maxResults : undefined,
wildCard : "",
caseSensitive : false,
notCharacter : "!",
maxHeight : 350,
highlightMatches : true,
onSelect : undefined,
ajaxResults : false,
key : "id",
value : "name",
textId : ""
};
settings = $.extend(defaults, settings);
return this.each(function() {
function regexEscape(txt, omit) {
var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[',
']', '{', '}', '\\'];
if (omit) {
for (var i = 0; i < specials.length; i++) {
if (specials[i] === omit) {
specials.splice(i, 1);
}
}
}
var escapePatt = new RegExp('(\\' + specials.join('|\\') + ')',
'g');
return txt.replace(escapePatt, '\\$1');
}
var obj = $(this), wildCardPatt = new RegExp(
regexEscape(settings.wildCard || ''), 'g'), results = $('<div />'), currentSelection, pageX, pageY;
function selectResultItem(item) {
$(results).html('').hide();
var tId = settings.textId;
$('#' + tId).val(item.name);
if (typeof settings.onSelect === 'function') {
settings.onSelect(item, settings.textId);
}
}
function setHoverClass(el) {
$('div.resultItem', results).removeClass('hover');
$(el).addClass('hover');
currentSelection = el;
}
function buildResults(resultObjects, sFilterTxt) {
var v1 = settings.key;
var v2 = settings.value;
sFilterTxt = "(" + sFilterTxt + ")";
var bOddRow = true, i, iFound = 0, filterPatt = settings.caseSensitive
? new RegExp(sFilterTxt, "g")
: new RegExp(sFilterTxt, "ig");
$(results).html('').hide();
for (i = 0; i < resultObjects.length; i += 1) {
var item = $('<div />'), text = resultObjects[i][v1];
// 楂樹寒鏄剧ず 杈撳叆鐨勫瓧绗�
// if (settings.highlightMatches === true) {
// text = text.replace(filterPatt,
// "<strong>$1</strong>");
// }
$(item).append('<p class="text">' + text + ':'
+ resultObjects[i][v2]);
$(item).append('</p>');
if (typeof resultObjects[i].image === 'string') {
$(item).prepend('<img src="' + resultObjects[i].image
+ '" />')
.append('<br style="clear:both;" />');
}
$(item).addClass('resultItem').addClass((bOddRow)
? 'odd'
: 'even').click(function(n) {
return function() {
selectResultItem(resultObjects[n]);
};
}(i)).mouseover(function(el) {
return function() {
setHoverClass(el);
};
}(item));
$(results).append(item);
bOddRow = !bOddRow;
iFound += 1;
if (typeof settings.maxResults === 'number'
&& iFound >= settings.maxResults) {
break;
}
}
if ($('div', results).length > 0) {
currentSelection = undefined;
$(results).show().css('height', 'auto');
if ($(results).height() > settings.maxHeight) {
$(results).css({
'overflow' : 'auto',
'height' : settings.maxHeight + 'px'
});
}
}
}
function checkStr(str) {
var iu, iuu, regArray = new Array("", "◎", "■", "●", "№", "↑",
"→", "↓" + "!", "@", "#", "$", "%", "^", "&", "*", "(",
")", "_", "-", "+", "=", "|", "'", "[", "]", "?", "~",
"`" + "!", "<", ">", "‰", "→", "←", "↑", "↓", "¤", "§",
"#", "&", "&", "\", "≡", "≠" + "≈", "∈", "∪", "∏", "∑",
"∧", "∨", "⊥", "∥", "∥", "∠", "⊙", "≌", "≌", "√", "∝",
"∞", "∮" + "∫", "≯", "≮", ">", "≥", "≤", "≠", "±", "+",
"÷", "×", "/", "Ⅱ", "Ⅰ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ",
"Ⅹ", "Ⅻ", "㈠", "㈡" + "╄", "╅", "╇", "┻", "┻", "┇", "┭",
"┷", "┦", "┣", "┝", "┤", "┷", "┷", "┹", "╉", "╇", "【",
"】" + "㈢", "㈣", "㈤", "㈥", "㈦", "㈧", "㈨", "㈩", "①", "②",
"③", "④", "⑤", "⑥", "⑦", "⑧", "⑨", "⑩", "┌", "├", "┬",
"┼", "┍", "┕", "┗", "┏", "┅", "─" + "〖", "〗", "←", "〓",
"☆", "§", "□", "‰", "◇", "︿", "@", "△", "▲", "#", "℃",
"※", ".", "≈", "¢");
iuu = regArray.length;
for (iu = 1; iu <= iuu; iu++) {
if (str.indexOf(regArray[iu]) != -1) {
return false;
}
}
return true;
}
function runSuggest(e) {
if (this.value.length < settings.minCharacters) {
$(results).html('').hide();
return false;
}
var resultObjects = [], sFilterTxt = (!settings.wildCard)
? regexEscape(this.value)
: regexEscape(this.value, settings.wildCard).replace(
wildCardPatt, '.*'), bMatch = true, filterPatt, i;
if (settings.notCharacter
&& sFilterTxt.indexOf(settings.notCharacter) === 0) {
sFilterTxt = sFilterTxt.substr(
settings.notCharacter.length, sFilterTxt.length);
if (sFilterTxt.length > 0) {
bMatch = false;
}
}
sFilterTxt = sFilterTxt || '.*';
sFilterTxt = settings.wildCard ? '^' + sFilterTxt : sFilterTxt;
filterPatt = settings.caseSensitive
? new RegExp(sFilterTxt)
: new RegExp(sFilterTxt, "i");
if (settings.ajaxResults === true) {
var JsonURL = searchData(this.value, settings.wildCard,
settings.caseSensitive, settings.notCharacter);
$.ajaxSetup({
cache : false
});
if (checkStr(this.value)) {
$.getJSON(JsonURL, function(data) {
if (typeof data === 'string') {
data = JSON.parse(data);
}
buildResults(data, sFilterTxt);
});
} else {
alert("不允许包含非法字符" + this.value);
this.value = "";
this.focus();
}
} else {
for (i = 0; i < searchData.length; i += 1) {
if (filterPatt.test(searchData[i].text) === bMatch) {
resultObjects.push(searchData[i]);
}
}
}
buildResults(resultObjects, sFilterTxt);
}
function keyListener(e) {
switch (e.keyCode) {
case 13 :
$(currentSelection).trigger('click');
return false;
case 40 :
if (typeof currentSelection === 'undefined') {
currentSelection = $('div.resultItem:first',
results).get(0);
} else {
currentSelection = $(currentSelection).next()
.get(0);
}
setHoverClass(currentSelection);
if (currentSelection) {
$(results).scrollTop(currentSelection.offsetTop);
}
return false;
case 38 :
if (typeof currentSelection === 'undefined') {
currentSelection = $('div.resultItem:last', results)
.get(0);
} else {
currentSelection = $(currentSelection).prev()
.get(0);
}
setHoverClass(currentSelection);
if (currentSelection) {
$(results).scrollTop(currentSelection.offsetTop);
}
return false;
default :
runSuggest.apply(this, [e]);
}
}
$(results).addClass('jsonSuggestResults').css({
'top' : (obj.position().top + obj.height() + 5) + 'px',
'left' : obj.position().left + 'px',
'width' : obj.width() + 'px'
}).hide();
obj.after(results).keyup(keyListener).blur(function(e) {
var resPos = $(results).offset();
resPos.bottom = resPos.top + $(results).height();
resPos.right = resPos.left + $(results).width();
if (pageY < resPos.top || pageY > resPos.bottom
|| pageX < resPos.left || pageX > resPos.right) {
$(results).hide();
}
}).focus(function(e) {
$(results).css({
'top' : (obj.position().top + obj.height() + 5)
+ 'px',
'left' : obj.position().left + 'px'
});
if ($('div', results).length > 0) {
$(results).show();
}
}).attr('autocomplete', 'off');
$().mousemove(function(e) {
pageX = e.pageX;
pageY = e.pageY;
});
if ($.browser.opera) {
obj.keydown(function(e) {
if (e.keyCode === 40) {
return keyListener(e);
}
});
}
settings.notCharacter = regexEscape(settings.notCharacter || '');
if (!settings.ajaxResults) {
if (typeof searchData === 'function') {
searchData = searchData();
}
if (typeof searchData === 'string') {
searchData = JSON.parse(searchData);
}
}
});
};
})(jQuery);
以下是我调用的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%>">
<title>My JSP 'employeelist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.jsonSuggest-dev.js"></script>
<script type="text/javascript" src="js/jquery.jsonSuggest.js"></script>
<link rel="stylesheet" href="css/jsonSuggest.css" type="text/css"></link>
<script type="text/javascript">
$(function (){
$('#empName').jsonSuggest(
function(text, wildCard, caseSensitive, notCharacter) {
var pin = $("#empName");
var url = "ownerListAction.do?pin="+pin.val();
return url;
},{ajaxResults:true,minCharacters:1,key:"ename",value:"eenl",textId:"empName"});
})
</script>
</head>
<body>
<input id="empName" />
</body>
</html>
分享到:
相关推荐
白色简洁风格的学术交流会议源码下载.zip
内容概要:本文提出了利用交变电流场测量(ACFM)技术对水下结构中的缺陷进行可视化和智能识别的方法。通过对缺陷引起畸变磁场的分析,开发了梯度成像算法作为图像预处理方法,突显了缺陷的视觉形态。实验验证了梯度成像算法的有效性,并利用卷积神经网络(CNN)深度学习算法识别预处理后的灰度图样本。实验结果显示,电流扰动理论澄清了特征信号与缺陷形态之间的关系,单裂纹、不规则裂纹和腐蚀等缺陷可以被智能识别和准确评估。 适合人群:从事水下结构检测的研究人员和技术人员,以及对非破坏性检测技术感兴趣的工程领域人士。 使用场景及目标:① 海洋钻井平台、管道、海底油气处理设施等水下结构的缺陷检测;② 利用交变电流场测量技术和图像处理技术提高缺陷识别的准确性和智能化程度。 其他说明:本文不仅提出了交变电流场测量技术的新方法,还通过实验证明了这些方法的有效性,为实际应用提供了技术支持。
Neck Deep - In Bloom [mqms2].mgg2.flac
基于ESO的永磁同步电机无感FOC 1.采用线性扩张状态观测器(LESO)估计电机反电势,利用锁相环从反电势中提取位置和转速信息,从而实现无位置传感器控制; 2.提供算法对应的参考文献和仿真模型。 购买赠送PMSM控制相关电子资料。 仿真模型纯手工搭建,不是从网络上复制得到。 仿真模型仅供学习参考。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
三相逆变 单相 三相逆变器 SPWM ---stm32主控(输入、输出具体可根据需要设定),本逆变器可以二次开发。 本内容只包括 逆变程序,实现变频(0~100Hz)、变压调节,均有外接按键控制(使用C语言实现)。
NSConditionException如何解决.md
白色简洁风格的房产交易中心企业网站源码下载.zip
水果分拣机15可编辑全套技术资料100%好用.zip
内容概要:本文为《1+X移动互联网应用开发初级》课程的期中考试试卷解析。解析涵盖了Java开发入门基础知识,主要包括Android中SQLite数据库操作、ContentProvider使用、BroadcastReceiver、Intent传递数据、Activity生命周期、Service生命周期管理、文件操作模式、通知管理、JSON和XML解析、权限管理等内容。通过对各个题目的解析,帮助学生更好地理解和掌握移动互联网应用开发的基础知识和技术。 适合人群:正在学习《1+X移动互联网应用开发初级》课程的学生,尤其是网络21班的学生。 使用场景及目标:①帮助学生理解和掌握Android开发的基础知识点;②提高学生的实际操作能力,尤其是在期中考试后的查漏补缺。 阅读建议:建议学生在阅读解析时,结合教材和实践操作,加深对各知识点的理解。同时,可以通过模拟题进行练习,巩固学习成果。
自动送料切割机sw可编辑全套技术资料100%好用.zip
ClosedChannelException(解决方案).md
长焊缝打磨机step全套技术资料100%好用.zip
从给定的文件信息来看,核心知识点聚焦于内部审计业务的实施,特别是内部审计师如何遵循规范、标准和最佳实践来进行审计工作。以下是对关键知识点的深入解析: ### 内部审计业务实施的关键要素 #### 理解内部审计业务全过程 内部审计业务覆盖了从计划、实施、报告到后续跟踪的全过程,要求内部审计师具备全面的专业技能和严谨的工作态度。这一过程旨在确保组织的风险管理、控制和治理机制的有效性。 #### 核心业务类型 内部审计主要包括确认和咨询两大业务类型。确认服务侧重于评估组织的控制和风险管理程序,而咨询服务则更注重提供改进和优化现有流程的建议。 ### 实施内部审计的依据与标准 #### IIA职业实务框架 - **标准与道德规范**:包括内部审计实务标准和职业道德规范,前者指导内部审计活动的执行,后者强调审计师的公正、客观、保密和胜任能力。 - **实务公告**:提供非强制性的指导,涉及内部审计的特定操作流程和程序。 - **发展与实务帮助**:涵盖各种专业资源,如研究资料、书籍和培训课程,为审计人员提供深入的学习和支持。 #### 法律、法规和其他标准 除了IIA框架外,内部审计还应考虑适用
IncompatibleClassChangeError(解决方案).md
html渲染器,粘贴html代码到这个渲染器即可渲染出对应的效果
白色简洁风格的时尚宝马老爷车企业网站模板下载.zip
白色宽屏风格的贸易商务企业网站模板.zip
白色宽屏风格的旅游路线推荐整站网站源码下载.zip
白色简洁风格的社交博客网站后台系统源码下载.zip