input模糊搜索功能

<!doctype html>
<meta charset="utf-8">
<style type="text/css">
    body {
        margin-left: 0px;
        margin-top: 0px;
        margin-right: 0px;
        margin-bottom: 0px;
    }

    .auto_hidden {
        width: 204px;
        border-top: 1px solid #333;
        border-bottom: 1px solid #333;
        border-left: 1px solid #333;
        border-right: 1px solid #333;
        position: absolute;
        display: none;
    }

    .auto_show {
        width: 204px;
        border-top: 1px solid #333;
        border-bottom: 1px solid #333;
        border-left: 1px solid #333;
        border-right: 1px solid #333;
        position: absolute;
        z-index: 9999; /* 设置对象的层叠顺序 */
        display: block;
    }

    .auto_onmouseover {
        color: #ffffff;
        background-color: highlight;
        width: 100%;
    }

    .auto_onmouseout {
        color: #000000;
        width: 100%;
        background-color: #ffffff;
    }
</style>
<script language="javascript" type="text/javascript">
    var $ = function (id) {
        return "string" == typeof id ? document.getElementById(id) : id;
    }
    var Bind = function (object, fun) {
        return function () {
            return fun.apply(object, arguments);
        }
    }
    function AutoComplete(obj, autoObj, arr) {
        this.obj = $(obj); //输入框
        this.autoObj = $(autoObj);//DIV的根节点
        this.value_arr = arr; //不要包含重复值
        this.index = -1; //当前选中的DIV的索引
        this.search_value = ""; //保存当前搜索的字符
    }
    AutoComplete.prototype = {
        //初始化DIV的位置
        init: function () {
            this.autoObj.style.left = this.obj.offsetLeft + "px";
            this.autoObj.style.top = this.obj.offsetTop + this.obj.offsetHeight + "px";
            this.autoObj.style.width = this.obj.offsetWidth - 2 + "px";//减去边框的长度2px
        },
        //删除自动完成需要的所有DIV
        deleteDIV: function () {
            while (this.autoObj.hasChildNodes()) {
                this.autoObj.removeChild(this.autoObj.firstChild);
            }
            this.autoObj.className = "auto_hidden";
        },
        //设置值
        setValue: function (_this) {
            return function () {
                _this.obj.value = this.seq;
                _this.autoObj.className = "auto_hidden";
            }
        },
        //模拟鼠标移动至DIV时,DIV高亮
        autoOnmouseover: function (_this, _div_index) {
            return function () {
                _this.index = _div_index;
                var length = _this.autoObj.children.length;
                for (var j = 0; j < length; j++) {
                    if (j != _this.index) {
                        _this.autoObj.childNodes[j].className = ‘auto_onmouseout‘;
                    } else {
                        _this.autoObj.childNodes[j].className = ‘auto_onmouseover‘;
                    }
                }
            }
        },
        //更改classname
        changeClassname: function (length) {
            for (var i = 0; i < length; i++) {
                if (i != this.index) {
                    this.autoObj.childNodes[i].className = ‘auto_onmouseout‘;
                } else {
                    this.autoObj.childNodes[i].className = ‘auto_onmouseover‘;
                    this.obj.value = this.autoObj.childNodes[i].seq;
                }
            }
        },

        //响应键盘
        pressKey: function (event) {
            var length = this.autoObj.children.length;
            //光标键"↓"
            if (event.keyCode == 40) {
                ++this.index;
                if (this.index > length) {
                    this.index = 0;
                } else if (this.index == length) {
                    this.obj.value = this.search_value;
                }
                this.changeClassname(length);
            }
                //光标键"↑"
            else if (event.keyCode == 38) {
                this.index--;
                if (this.index < -1) {
                    this.index = length - 1;
                } else if (this.index == -1) {
                    this.obj.value = this.search_value;
                }
                this.changeClassname(length);
            }
                //回车键
            else if (event.keyCode == 13) {
                this.autoObj.className = "auto_hidden";
                this.index = -1;
            } else {
                this.index = -1;
            }
        },
        //程序入口
        start: function (event) {
            if (event.keyCode != 13 && event.keyCode != 38 && event.keyCode != 40) {
                this.init();
                this.deleteDIV();
                this.search_value = this.obj.value;
                var valueArr = this.value_arr;
                valueArr.sort();
                if (this.obj.value.replace(/(^\s*)|(\s*$)/g, ‘‘) == "") { return; }//值为空,退出
                try { var reg = new RegExp("(" + this.obj.value + ")", "i"); }
                catch (e) { return; }
                var div_index = 0;//记录创建的DIV的索引
                for (var i = 0; i < valueArr.length; i++) {
                    if (reg.test(valueArr[i])) {
                        var div = document.createElement("div");
                        div.className = "auto_onmouseout";
                        div.seq = valueArr[i];
                        div.onclick = this.setValue(this);
                        div.onmouseover = this.autoOnmouseover(this, div_index);
                        div.innerHTML = valueArr[i].replace(reg, "<strong>$1</strong>");//搜索到的字符粗体显示
                        this.autoObj.appendChild(div);
                        this.autoObj.className = "auto_show";
                        div_index++;
                    }
                }
            }
            this.pressKey(event);
            window.onresize = Bind(this, function () { this.init(); });
        }
    }
</script>
<html>

<body>
    <div align="center" style="padding-top:50px">
        <input type="text" style="width:300px;height:20px;font-size:14pt;" placeholder="请输入a或b模拟效果" id="o" onkeyup="autoComplete.start(event)">
    </div>
    <div class="auto_hidden" id="auto"><!--自动完成 DIV--></div>
    <script>
        var autoComplete = new AutoComplete(‘o‘, ‘auto‘, [‘b0‘, ‘b12‘, ‘b22‘, ‘b3‘, ‘b4‘, ‘b5‘, ‘b6‘, ‘b7‘, ‘b8‘, ‘b2‘, ‘abd‘, ‘ab‘, ‘acd‘, ‘accd‘, ‘b1‘, ‘cd‘, ‘ccd‘, ‘cbcv‘, ‘cxf‘]);
    </script>
</body>
</html>
时间: 2024-10-09 11:54:38

input模糊搜索功能的相关文章

Python中raw_input() &amp; input() 的功能对比

raw_input的功能是方便的从控制台读入数据.  input与raw_input都是Python的内建函数,实现与用户的交互,但是功能不同. 一.raw_input 下面介绍让raw_input的几种功能. 1.输入字符串 1>>> raw_input_A = raw_input("raw_input:") 2 raw_input:abc 3>>>type(raw_input_A) 4 <type 'str'> 上面输入的abc为字符

超好用的input模糊搜索 jq模糊搜索,

上来先展示效果:默认展示效果: 输入内容: 上代码: css部分: <style type="text/css"> * { padding: 0; margin: 0; } h2 { margin-bottom: 20px; } #container { width: 500px; text-align: center; margin: 0 auto; font-family: "微软雅黑"; margin-top: 50px; } .selectCon

input 滑块功能range javascript方法使用

<script> var rangelist=document.querySelectorAll('[type="range"]'); for(var i=0; i<rangelist.length; i++){ //获得当期遍历的值i并赋值给range var range=rangelist[i]; range.onchange=function(){ //range.onchange= 当input的值发生改变时触发事件 //onchange()事件一般用于用户表

input 模糊搜索

<html> <head> <title>test</title> <script type="text/javascript"> //模拟数据库中的一组数据(会使用用户输入的值在这些数据中进行模糊匹配) var arr = ['aabb','abc','23sa','adsdw','32ad','sd','ssdd','ssddddd','233a','sdfsadf','rfgsedr','rtgea','adfasdf'

IOS系统兼容input keyup事件

最近在做移动端模糊搜索功能,js监听input的keyup事件,在chrom模拟器和android手机环境运行都没有问题,到了ios手机却出现bug,没法实现功能: 查了好一会资料,发现keyup事件在ios系统下存在不兼容问题,解决的方法是通过 html5的 oninput事件来实现,代码如下: <input id="input" type="text" /> document.querySelector('#input').addEventListe

easyui combobox模糊搜索

combobox实现模糊搜索功能 <input class="easyui-combobox" id="hybq_PADD" name="hybq_PADD" data-options="valueField:'id',textField:'text',required:true, panelHeight:'auto', panelMaxHeight:200,panelMinHeight:100" validType=&

【学习笔记】python2和python3的input()

python2中的input()只接受变量作为传入值,非变量内容会报错. 1 >>> user=input("Enter your name:") 2 Enter your name:Kaito 3 Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5 File "<string>", line 1

AJAX在线音乐网站(3)Part one 功能实现

今天打算把网站功能的具体实现给总结回顾一下,如果你想了解整个小项目,建议你先看看前面2篇博客. 1.AJAX在线音乐网站(1)需求和功能结构 2.AJAX在线音乐网站(2)数据库和开发环境 7.网站主要模块实现 a.在线音乐前台 由于在线音乐网站要提供用户在线音乐的相关服务,当用户打开网站时,引入眼帘的是首页,所以首页的对于整个网站来说是非常重要的一个页面,首页排版和设计的美观与否将直接影响到游客的浏览和用户的注册.首页不仅要实现各种功能的展示,而且还要着眼于系统整体风格,能让首页做到功能完善,

php://input,php://filter,data URI schema的那些事

一.php://input一句话木马 在调研dedecms的历史漏洞时,发现了dedecms安装文件曾经出过被植入后门的漏洞(SSV-ID站点include目录下shopcar.class.php文件被植入一句话木马) @eval(file_get_contents('php://input')) 我是个十足的php菜鸟,只有用到的时候才会去查查语法书,对php://input也只是有点印象而已,于是用脚本phpinput.php,配合firefox Hackbar插件测试了一下php://in