自己写的自动完成js插件源码

  经测试,此插件兼容ie,chrome,firefox。 //autocomplete 0.2 ////////////////////////////////////////////////// /////////////////////////////////////////////////// //////////////////////// var g_divName = undefined; var g_ajaxFunc = undefined; var g_tbx = undefined; var g_hid = undefined; var g_funcMC = undefined; var g_funcHid = undefined; var g_funcBZ = undefined; var g_isInited = false; var g_zzArray; var g_isPaged = false; var g_pageMax = 10; var g_pageIndex = 1; //public////////////////////////////////////////// /////////////////////////////////////////////////// ///////////// //ajaxFunc:用于返回数组的ajax函数; //tbx:用于存放选中的内容的textbox的id; //hid:用于存放选中的隐藏属性的hidden的id; //funcMC(item):用于返回MC的函数; //funcHid(item):用于返回HID的函数; //funcBZ(item):用于返回BZ的函数; //divName:用于列出autoComplete的list的id; function onInitAutoComplete(ajaxFunc, tbx, hid, funcMC, funcHid, funcBZ, divList) { var tbTerm = document.getElementById(tbx); if (tbTerm == undefined) { return; } if (tbTerm.attachEvent) { tbTerm.attachEvent("onkeyup", onTextChange_ex); } else if (tbTerm.addEventListener) { tbTerm.addEventListener("keyup", onTextChange_ex, false); } g_ajaxFunc = ajaxFunc; g_tbx = tbx; g_hid = hid; g_funcMC = funcMC; g_funcHid = funcHid; g_funcBZ = funcBZ; g_isInited = true; if (arguments[6] == undefined) { g_divName = 'div_AutoComplete_list_wyyy'; var br = document.createElement("br"); var divList = document.createElement("DIV"); divList.id = g_divName; divList.style.zIndex = "10"; divList.style.textAlign = "left"; divList.style.position = "absolute"; divList.style.width = parseInt(tbTerm.style.width) + 7 + "px"; var praentElement = tbTerm.parentElement || tbTerm.parentNode; praentElement.appendChild(br); praentElement.appendChild(divList); document.getElementById(g_divName).style.display = ""; } else if (arguments[6] != undefined) { g_divName = divList; } } function setPageSize(pageSize) { g_pageMax = pageSize } function setListWidth(nWidth) { var divList = document.getElementById(g_divName); divList.style.width = nWidth; } function onTextChange_ex() { var tbx = document.getElementById(g_tbx); onTextChange(tbx); } function onTextChange(oText) { if (g_isInited == false) return; if (oText.value == null || oText.value == "") { document.getElementById(g_divName).innerHTML = ""; return; } var event = arguments[0] || window.event; var ls_keycode = event.keyCode || event.charCode; if (ls_keycode != 40 && ls_keycode != 38 && ls_keycode != 13) g_ajaxFunc(oText.value, f_createItemList); } //private///////////////////////////////////////// //////////////////////////////////////// function f_clrCurrent() { var ls_TRName = "tr" + g_nCurrentTr; var trObj = document.getElementById(ls_TRName); if (trObj != undefined) { f_ClrColor(trObj); } } function f_setCurrent() { var ls_TRName = "tr" + g_nCurrentTr; var trObj = document.getElementById(ls_TRName); if (trObj != undefined) { f_SetColor(trObj); } } function f_createItemList(ls_zzArray) { g_pageIndex = 1; g_zzArray = ls_zzArray; g_isPaged = false; var zzArray = ls_zzArray; var arrayLen = zzArray.length; if (arrayLen > g_pageMax) { arrayLen = g_pageMax; g_isPaged = true; } var ls_InnerHtml = f_createPage(0, arrayLen, zzArray); document.getElementById(g_divName).innerHTML = ls_InnerHtml; g_nCurrentTr = 0; f_setCurrent(); } //开始位置,长度,症状数组 function f_createPage(nPageStart, arrayLen, zzArray) { var ls_InnerHtml = ""; for (var i = nPageStart; i "; ls_InnerHtml += "" + g_funcMC(zzArray[i]) + ""; if (g_funcHid != undefined) ls_InnerHtml += ""; ls_InnerHtml += ""; if (g_funcBZ != undefined) ls_InnerHtml += "" + g_funcBZ(zzArray[i]) + ""; ls_InnerHtml += ""; } if (g_isPaged == true) { ls_InnerHtml += f_pageArray(zzArray); } ls_InnerHtml += ""; return ls_InnerHtml; } function f_pageGoto(nPageIndex) { g_pageIndex = nPageIndex; var zzArray = g_zzArray; var arrayLen = g_pageMax; if (g_zzArray.length - g_pageMax * (nPageIndex - 1) "; var nPageNum = zzArray.length / g_pageMax; if ((zzArray.length % g_pageMax) > 0) { nPageNum++; } for (var i = 1; i " + i + " "; } else { ls_InnerHtml += " " + i + " "; } } ls_InnerHtml += ""; return ls_InnerHtml; } function f_pageMouseOver(obj) { obj.style.cursor = "hand"; } function f_pageMouseOut(obj) { obj.style.cursor = "normal"; } var g_nOldColor; var g_nCurrentTr = 0; function f_SetColor(Obj) { g_nOldColor = Obj.style.backgroundColor; Obj.style.backgroundColor = "#99ccff"; } function f_ClrColor(Obj) { Obj.style.backgroundColor = g_nOldColor; } var g_isMouseOn = false; function f_mouseOn() { f_clrCurrent(); g_isMouseOn = true; } function f_mouseOut() { f_setCurrent(); g_isMouseOn = false; } function onTextSelected(obj) { var ls_idName = obj.id; var rowID = ls_idName.substr(2); ls_idName = "td" + rowID; var obj = document.getElementById(ls_idName); var obj2 = obj.childNodes[1].value; if (document.getElementById(g_hid) != undefined) document.getElementById(g_hid).value = obj2; var tbx_zz = document.getElementById(g_tbx); if (tbx_zz != undefined) { tbx_zz.value = obj.innerText || obj.textContent; tbx_zz.focus(); } document.getElementById(g_divName).innerHTML = ""; g_nCurrentTr = -1; g_isMouseOn = false; if (tbx_zz != undefined) { tbx_zz.focus(); } } document.onkeydown = function() { var event = arguments[0] || window.event; var ls_keycode = event.keyCode || event.charCode; switch (ls_keycode) { case 40: //down if (g_isMouseOn == true) return; var ls_TRNamePre = "tr" + g_nCurrentTr; var trObjPre = document.getElementById(ls_TRNamePre); if (trObjPre != undefined) { f_ClrColor(trObjPre); } g_nCurrentTr++; var ls_TRName = "tr" + g_nCurrentTr; var trObj = document.getElementById(ls_TRName); if (trObj != undefined) { f_SetColor(trObj); } else { g_nCurrentTr--; ls_TRName = "tr" + g_nCurrentTr; trObj = document.getElementById(ls_TRName); if (trObj != undefined) { f_SetColor(trObj); } } return false; case 38: //up if (g_isMouseOn == true) return; var ls_TRNamePre = "tr" + g_nCurrentTr; var trObjPre = document.getElementById(ls_TRNamePre); if (trObjPre != undefined) { f_ClrColor(trObjPre); } g_nCurrentTr--; var ls_TRName = "tr" + g_nCurrentTr; var trObj = document.getElementById(ls_TRName); if (trObj != undefined) { f_SetColor(trObj); } else { g_nCurrentTr++; ls_TRName = "tr" + g_nCurrentTr; trObj = document.getElementById(ls_TRName); if (trObj != undefined) { f_SetColor(trObj); } } return false; case 13: //enter ls_idName = "td" + g_nCurrentTr; var obj = document.getElementById(ls_idName); var obj2 = ""; if (obj != undefined) { obj2 = obj.childNodes[1].value; var tbx = document.getElementById(g_tbx) if (tbx != undefined) tbx.value = obj.innerText || obj.textContent; } if (document.getElementById(g_hid) != undefined) document.getElementById(g_hid).value = obj2; document.getElementById(g_divName).innerHTML = ""; g_nCurrentTr = -1; return false; case 27: //esc document.getElementById(g_divName).innerHTML = ""; break; default: break; } return true; } //end of autocomplete ////////////////////////////////////////////////// /////////////////////////////////////////////////// ///////////////////////////// 下次更新使用实例。
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值