博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于js智能提示的封装(修订版)
阅读量:5959 次
发布时间:2019-06-19

本文共 6723 字,大约阅读时间需要 22 分钟。

修改后的智能提示,下拉框的样式兼容了IE6,7,8,9.  没有了之前的css文件和下拉框的html代码。清除了textbox的记忆功能和点击enter时页面回传。只须一个Bonker.js文件即可。
           使用非常简单调用bonker.js文件里面的 init(id, url, fun);的方法。
           说明:id为输入框的客户端id,url为ajax响应的地址。多条数据用逗号分隔。fun为当选择下拉框的一条数据后执行的函数
                    id和url为必须传的参数。fun为可选参数。没有则不用填写
 
js文件代码:
                               bonker.js文件内容
//初始化,为text绑定事件,定义url,回调函数fun(可选)var bonkerDiv;var bonkerFun;var txtId;function init(id, url, fun) {    txtId = id;    if (url) {        bonkerUrl = url;    } else { return; } if (fun) {        bonkerFun = fun;    }    textControl = document.getElementById(id);    //清除输入框记忆功能    textControl.autocomplete = "off";    if (textControl.attachEvent) {        textControl.attachEvent("onkeyup", main);        textControl.attachEvent("onkeypress", pressEnter);    } else {        textControl.addEventListener("keyup", main, false);        textControl.addEventListener("keypress", pressEnter, false);    }}//阻止输入enter,页面回传function pressEnter(ev) {    if (window.event) {        ev = window.event;    }    if (ev.keyCode == 13) {        if (navigator.userAgent.indexOf("MSIE") > 0)            ev.returnValue = false;        else            ev.preventDefault();    }}//处理键盘事件主要是enter  向上 向下键function main(ev) {    if (window.event) {        ev = window.event;    }    if (ev.keyCode == 40) {        divNext();    } else if (ev.keyCode == 38) {        divPre();    } else if (ev.keyCode == 13) {        bonkerFunction();        bonkerDiv.style.display = "none";        return false;    }    else {        bonkerData = textControl.value;        if (bonkerData.length == 0 && bonkerDiv) {            bonkerDiv.style.display = "none";        } else {            getData(textControl.value, textControl);        }    }}//创建xmlhttp对象var xhr = function () {    if (!arguments.callee.single) {        var fns = [      function () { return new XMLHttpRequest(); },      function () { return new ActiveXObject('Msxml2.XMLHTTP'); },      function () { return new ActiveXObject('Microsoft.XMLHTTP'); },    ];        for (var i = 0, n = fns.length; i < n; i++) {            try {                fns[i]();                arguments.callee.single = fns[i];                break;            } catch (e) { }        }        return arguments.callee.single();    } else {        return arguments.callee.single();    }}//ajax获取数据 数据以逗号分开function getData(va, obj) {    var xmlHttp = xhr();    xmlHttp.open("POST", bonkerUrl, true);    xmlHttp.onreadystatechange = function () {        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {            showData(obj, xmlHttp.responseText);        }    }    xmlHttp.send(va);}//兼容获取offsetTop和offsetLeftfunction getAbsoluteOffsetTop(obj) {    var top = obj.offsetTop;    while (obj = obj.offsetParent) top += obj.offsetTop;    return top;}function getAbsoluteOffsetLeft(obj) {    var left = obj.offsetLeft;    while (obj = obj.offsetParent) left += obj.offsetLeft;    return left;}//展示数据,动态生成下拉框,为每个选项绑定事件function showData(obj, result) {    var resArr = result.split(",");    bonkerDiv = document.getElementById("showDivBonker");    if (!bonkerDiv) {        bonkerDiv = document.createElement("div");        bonkerDiv.id = "showDivBonker";        bonkerDiv.style.display = "none";        bonkerDiv.style.position = "absolute";        bonkerDiv.style.border = "1px solid #817F82";        bonkerDiv.style.zIndex = "9999";        bonkerDiv.style.backgroundColor = "#ffffff";        document.body.appendChild(bonkerDiv);        var bonkerBody = document;        if (bonkerBody.attachEvent) {            bonkerBody.attachEvent("onmousedown", showBonkerBlur);        } else {            bonkerBody.addEventListener("mousedown", showBonkerBlur, false);        }    }    var bonkerTop = getAbsoluteOffsetTop(obj);    var bonkerLeft = getAbsoluteOffsetLeft(obj);    bonkerDiv.style.top = (bonkerTop + obj.offsetHeight) + "px";    bonkerDiv.style.left = bonkerLeft + "px";    bonkerDiv.style.width = obj.offsetWidth + "px";    bonkerDiv.style.height = obj.offsetHeight * resArr.length + "px";    bonkerDiv.style.display = "inline";    bonkerTotalLength = resArr.length;    bonkerLength = -1;    var innerStr = "";    for (var item in resArr) {        innerStr += "
" + resArr[item] + "
"; } bonkerDiv.innerHTML = innerStr;}function showBonkerBlur(ev) { var divTarget = ev.srcElement ? ev.srcElement : ev.target; if (divTarget.id.indexOf("bonker") < 0 && divTarget.id != txtId) bonkerDiv.style.display = "none";}//点击每个选项执行的函数function setText(obj) { textControl.value = obj.innerHTML; bonkerFunction(); bonkerDiv.style.display = "none";}//鼠标移动到选项执行function setColor(obj) { if (bonkerLength != -1) { document.getElementById("bonker" + bonkerLength).style.backgroundColor = ""; } obj.style.backgroundColor = "#EBEBEB"; bonkerLength = (Number)(obj.id.replace(/bonker/, ""));}//鼠标移走时执行function clearColor(obj) { obj.style.backgroundColor = "";}//向下键 执行函数function divNext() { try { if (bonkerLength != -1) { document.getElementById("bonker" + bonkerLength).style.backgroundColor = ""; } bonkerLength++; if (bonkerLength == bonkerTotalLength) { bonkerLength = -1; } if (bonkerLength == -1) { textControl.value = bonkerData; } else { var obj = document.getElementById("bonker" + bonkerLength); obj.style.backgroundColor = "#EBEBEB"; textControl.value = obj.innerHTML; } } catch (e) { return; }}//向上键 执行函数function divPre() { try { if (bonkerLength != -1) { document.getElementById("bonker" + bonkerLength).style.backgroundColor = ""; } else { bonkerLength = bonkerTotalLength; textControl.value = bonkerData; } bonkerLength--; if (bonkerLength == -1) { textControl.value = bonkerData; } else { var obj = document.getElementById("bonker" + bonkerLength); obj.style.backgroundColor = "#EBEBEB"; textControl.value = obj.innerHTML; } } catch (e) { return; }}function bonkerFunction() { if (bonkerFun) { bonkerFun(); }}

 

 

 

 
                                 前台html文件
            关键字:    

 

         AjaxHandler.ashx文件内容
<%@ WebHandler Language="C#" class="AjaxHandler" %>using System;using System.Web;using System.IO;public class AjaxHandler : IHttpHandler{    public void ProcessRequest(HttpContext context)    {        context.Response.ContentType = "text/plain";        StreamReader sr = new StreamReader(context.Request.InputStream);        string arg = sr.ReadToEnd();        context.Response.Write(arg+"1,ddfds ,dsfsdf,dsfsd,sdfsdf,ff,s,d,t,y");    }    public bool IsReusable    {        get        {            return false;        }    }}

 

转载地址:http://aqkax.baihongyu.com/

你可能感兴趣的文章
TypeScript 2019 路线图:更效率,更易用!
查看>>
Springboot从HellWorld开始
查看>>
Apache uimaFIT 3.0.0 发布,Java 的 UIMA 注解类
查看>>
用js来实现那些数据结构15(图01)
查看>>
web前端学习:React是什么,为什么要使用它?
查看>>
Cockpit 188 发布,交互式服务器管理界面
查看>>
常见排序算法及对应的时间复杂度和空间复杂度
查看>>
业界 | 在德州叫一辆自动驾驶车,Drive.ai安排了7辆无人车展开真实试验
查看>>
实时数据平台设计:解决从OLTP到OLAP实时流转缺失
查看>>
三家公司在SD-WAN方面的新动作
查看>>
C#在PDF中如何以不同颜色高亮文本
查看>>
在同一页面显示多个JavaScript统计图表
查看>>
Mac电脑Tomcat下载及安装(详细)MAC在Eclipse里配置tomcat
查看>>
多线程之-----------定时器
查看>>
C#语法——反射,架构师的入门基础。
查看>>
Beego Models 之 一
查看>>
SpringBoot+MyBatis开发环境搭建并实现登录权限过滤
查看>>
bond网络
查看>>
json学习笔记
查看>>
mysql硬件优化
查看>>