• javascript 邮箱输入自动补全插件(转)


    <!DOCTYPE HTML>
    <html>
        <head>
            <meta charset="utf-8">
            <title>inputSuggest_0.1.js</title>
            <style type="text/css">
                body{margin:0;padding:0;}
                input{200px;}
                .suggest-container{border:1px solid #C1C1C1;visibility:hidden;}
                .suggest-item{padding:3px 2px;}
                .suggest-active {background:#33CCFF;color:white;padding:3px 2px;}
            </style>
            <script type="text/javascript" >
            /**
     * JavaScript inputSuggest v0.1
     * Copyright (c) 2010 snandy
     * Blog: http://snandy.javaeye.com/
     * QQ群: 34580561
     * Date: 2010-09-25
     * Download by http://www.codefans.net
     *
     * new InputSuggest({
     *       input         HTMLInputElement 必选
     *       data             Array ['sina.cn','sina.com','2008.sina.com','vip.sina.com.cn'] 必选
     *       containerCls    容器className
     *       itemCls        容器子项className
     *       activeCls        高亮子项className
     *       width         宽度设置 此项将覆盖containerCls的width
     *    opacity        透明度设置 此项将覆盖containerCls的opacity
     * });
     */
    
    function InputSuggest(opt){
        this.win = null;
        this.doc = null;
        this.container = null;
        this.items = null;
        this.input = opt.input || null;
        this.containerCls = opt.containerCls || 'suggest-container';
        this.itemCls = opt.itemCls || 'suggest-item';
        this.activeCls = opt.activeCls || 'suggest-active';
        this.width = opt.width;
        this.opacity = opt.opacity;
        this.data = opt.data || [];
        this.active = null;
        this.visible = false;
        this.init();
    }
    InputSuggest.prototype = {
        init: function(){
            this.win = window;
            this.doc = window.document;
            this.container = this.$C('div');
            this.attr(this.container, 'class', this.containerCls);
            this.doc.body.appendChild(this.container);
            this.setPos();
            var _this = this, input = this.input;        
    
            this.on(input,'keyup',function(e){
                if(input.value==''){
                    _this.hide();
                }else{
                    _this.onKeyup(e);
                }
    
            });
            // blur会在click前发生,这里使用mousedown
            this.on(input,'blur',function(e){
                _this.hide();
            });
            this.onMouseover();
            this.onMousedown();
    
        },
        $C: function(tag){
            return this.doc.createElement(tag);
        },
        getPos: function (el){
            var pos=[0,0], a=el;
            if(el.getBoundingClientRect){
                var box = el.getBoundingClientRect();
                pos=[box.left,box.top];
            }else{
                while(a && a.offsetParent){
                    pos[0] += a.offsetLeft;
                    pos[1] += a.offsetTop;
                    a = a.offsetParent
                }
            }
            return pos;
        },
        setPos: function(){
            var input = this.input,
                pos = this.getPos(input),
                brow = this.brow,
                width = this.width,
                opacity = this.opacity,
                container = this.container;
            container.style.cssText =
                'position:absolute;overflow:hidden;left:'
                + pos[0] + 'px;top:'
                + (pos[1]+input.offsetHeight) + 'px;'
                // IE6/7/8/9/Chrome/Safari input[type=text] border默认为2,Firefox为1,因此取offsetWidth-2保证与FF一致
                + (brow.firefox ? input.clientWidth : input.offsetWidth-2) + 'px;';
            if(width){
                container.style.width = width + 'px';
            }
            if(opacity){
                if(this.brow.ie){
                    container.style.filter = 'Alpha(Opacity=' + opacity * 100 + ');';
                }else{
                    container.style.opacity = (opacity == 1 ? '' : '' + opacity);
                }
            }
        },
        show: function(){
            this.container.style.visibility = 'visible';
            this.visible = true;
        },
        hide: function(){
            this.container.style.visibility = 'hidden';
            this.visible = false;
        },
        attr: function(el, name, val){
            if(val === undefined){
                return el.getAttribute(name);
            }else{
                el.setAttribute(name,val);
                name=='class' && (el.className = val);
            }
        },
        on: function(el, type, fn){
            el.addEventListener ? el.addEventListener(type, fn, false) : el.attachEvent('on' + type, fn);
        },
        un: function(el, type, fn){
            el.removeEventListener ? el.removeEventListener(type, fn, false) : el.detachEvent('on' + type, fn);
        },
        brow: function(ua){
            return {
                ie: /msie/.test(ua) && !/opera/.test(ua),
                opera: /opera/.test(ua),
                firefox: /firefox/.test(ua)
            };
        }(navigator.userAgent.toLowerCase()),
        onKeyup: function(e){
            var container = this.container, input = this.input, iCls = this.itemCls, aCls = this.activeCls;
            if(this.visible){
                switch(e.keyCode){
                    case 13: // Enter
                        if(this.active){
                            input.value = this.active.firstChild.data;
                            this.hide();
                        }
                        return;
                    case 38: // 方向键上
                        if(this.active==null){
                            this.active = container.lastChild;
                            this.attr(this.active, 'class', aCls);
                            input.value = this.active.firstChild.data;
                        }else{
                            if(this.active.previousSibling!=null){
                                this.attr(this.active, 'class', iCls);
                                this.active = this.active.previousSibling;
                                this.attr(this.active, 'class', aCls);
                                input.value = this.active.firstChild.data;
                            }else{
                                this.attr(this.active, 'class', iCls);
                                this.active = null;
                                input.focus();
                                input.value = input.getAttribute("curr_val");
                            }
                        }
                        return;
                    case 40: // 方向键下
                        if(this.active==null){
                            this.active = container.firstChild;
                            this.attr(this.active, 'class', aCls);
                            input.value = this.active.firstChild.data;
                        }else{
                            if(this.active.nextSibling!=null){
                                this.attr(this.active, 'class', iCls);
                                this.active = this.active.nextSibling;
                                this.attr(this.active, 'class', aCls);
                                input.value = this.active.firstChild.data;
                               }else{
                                this.attr(this.active, 'class', iCls);
                                this.active = null;
                                input.focus();
                                input.value = input.getAttribute("curr_val");
                            }
                        }
                        return;
    
                }
    
            }
            if(e.keyCode==27){ // ESC键
                this.hide();
                input.value = this.attr(input,'curr_val');
                return;
            }
            if(input.value.indexOf('@')!=-1){return;}
            this.items = [];
    
            if(this.attr(input,'curr_val')!=input.value){
                this.container.innerHTML = '';
                for(var i=0,len=this.data.length;i<len;i++){
                    var item = this.$C('div');
                    this.attr(item, 'class', this.itemCls);
                    item.innerHTML = input.value + '@' + this.data[i];
                    this.items[i] = item;
                    this.container.appendChild(item);
                }
                this.attr(input,'curr_val',input.value);
            }
    
            this.show();
    
        },
        onMouseover: function(){
            var _this = this, icls = this.itemCls, acls = this.activeCls;
            this.on(this.container,'mouseover',function(e){
                var target = e.target || e.srcElement;
                if(target.className == icls){
                    if(_this.active){
                        _this.active.className = icls;
                    }
                    target.className = acls;
                    _this.active = target;
    
                }
            });
        },
        onMousedown: function(){
            var _this = this;
            this.on(this.container,'mousedown',function(e){
                var target = e.target || e.srcElement;
                _this.input.value = target.innerHTML;
                _this.hide();
            });
        }
    }    
    
            </script>
    
            <script type="text/javascript">
    
                window.onload = function(){
                    var sinaSuggest = new InputSuggest({
                        input: document.getElementById('sina'),
                        data: ['sina.cn','sina.com','vip.sina.com.cn','2008.sina.com','263.sina.com']
                    });
                    var sohuSuggest = new InputSuggest({
                         300,
                        opacity: 0.3,
                        input: document.getElementById('sohu'),
                        data: ['sohu.com','sogou.com','chinaren.com','vip.sohu.com','sohu.net','2008.sohu.com','sms.sohu.com']
                    });
    
                }
            </script>
        </head>
        <body>
            <div style="400px;margin:30px auto;text-align:center;">
                <label>新浪</label>
                <input type="text" id="sina"/>
                <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
                <label>搜狐</label>
                <input type="text" id="sohu"/>
            </div>
    
        </body>
    </html>
    
  • 相关阅读:
    docker-compose运行nginx
    docker后台持续运行
    docker-compose运行tomcat
    集群session解决方案
    docker运行mysql
    docker运行svn
    mongodb数据的导出和导入
    mongodb副本集的docker化安装
    grafana使用json数据源监控数据
    docker化安装grafana
  • 原文地址:https://www.cnblogs.com/lenga/p/3912663.html
Copyright © 2020-2023  润新知