zoukankan      html  css  js  c++  java
  • js插件自动完成

      最近一直在搞cordova,没来的及更新博客。最近写了个项目里经常用到的组件,贴出来大家一起研究进步。

      

       

    功能比较普通,但是够用了。贴一下代码。

    define([],function(){
        'use strict';
    
        var inputBlock = function(params){
            this.el = params.el;
            this.delimiter = /[;,;,]/gi;
            this.el.empty();
            this.el.append('<div id="nameCards" class="name-cards"></div><input id="inputText" class="input-text" type="text" value="请输入信息" />');
            this.input = this.el.find('#inputText');
            this.nameCards = this.el.find('#nameCards');
            this.lastLineTop = 0;
            this.maxNum = params.maxNum || 20;
            this.reg = params.reg || "";
            this.valueList = [];
            this.data = params.data || "";
        }
        inputBlock.prototype = {
            render : function(){
                var _this = this;
                _this.initData();
                _this.inputWidth = _this.el.width() - 40;
                _this.input.css({
                    width : _this.inputWidth,
                    padding : 0
                });
                _this.events();
    
            },
            events : function(){
                var _this = this;
                _this.input.bind('keydown',function(e){
                    if(e.keyCode == 13 || e.keyCode == 32){
                        var names = _this.getNameList(),
                            len = names.length;
                        if(len){
                            for(var i = 0;i<len;i++){
                                names[i] && _this.addCard({
                                    id : "card-" + parseInt(Math.random() * Math.pow(10, 10) + 1),
                                    name : names[i]
                                });
                            }
                        }
                    }
                    if(8 == e.keyCode && _this.input.val() == "" && $(".share-name-item").length > 0){
                        _this.removeCard({elem : $(".share-name-item").last()})
                    }
                }).bind("focus", function () {
                   _this.input.val("");
                   _this.input.css("color", "#333")
                }).bind('blur',function(e){
                    _this.input.val("")
                })
                _this.el.bind("click", function () {
                    _this.input.val("").focus();
                    _this.el.addClass("focus");
                })
                $(document).on("click",".remove-name" ,function (e) {
                    e.preventDefault();
                    e.stopPropagation();
                    return _this.removeCard({
                        elem : $(this).closest(".share-name-item")
                    })
                })
                $(document).on('click','.share-name-item',function(e){
                    e.preventDefault();
                    e.stopPropagation();
                    var el = $(this).find('span[class=name]'),
                        text = el.text(),
                        inputTxt = '<input type="text" style="height:18px;border:none;margin0px;padding:0px;" value="'+text+'"/>';
                    el.html('').append(inputTxt);
                    var input = el.find('input');
                    input.bind('keydown',function(e){
    
                        if(e.keyCode == 13 || e.keyCode == 32){
                            var names = _this.getNameList(input),
                                len = names.length;
                            if(len){
                                for(var i = 0;i<len;i++){
                                    names[i] && _this.addCard({
                                        id : "card-" + parseInt(Math.random() * Math.pow(10, 10) + 1),
                                        name : names[i],
                                        index : input.closest('.share-name-item').index()
                                    });
                                }
                            }
                        }
                    });
                    input.focus();
                })
            },
            addCard : function(par){
                var _this = this,
                    id = par.id ? 'id="' + par.id + '"' : "",
                    card = $('<a class="share-name-item" ' + id + ' href="javascript:;" hidefocus="hideFocus" uname="' + par.name + '"><span class="name">' + par.name + '</span><span class="remove-name"></span></a>');
                //添加验证规则和个数限制
                if(_this.maxNum < $('.share-name-item').length + 1){
                    alert("超出了最大限制,只能添加"+_this.maxNum + "个");
                    _this.input.click();
                    return false;
                }
                if(_this.reg && !_this.reg.test(par.name)){
                    alert("输入的格式有误,请重新输入");
                    return false;
                }
                if(par.hasOwnProperty('index')){
                    var elem = $('.share-name-item').eq(par.index),
                        val = elem.find('input').val()
                        elem.find('span[class=name]').html(val);
                    _this.valueList[par.index] = val;
    
                }else{
                    _this.nameCards.append(card);
                    _this.valueList.push(par.name);
                }
    
                _this.input.val("").focus();
                _this._reSize();
            },
            getNameList : function (input) {
                var _this = this;
                return $.trim(input ? input.val() : _this.input.val()).split(_this.delimiter)
            },
            removeCard : function(par){
                var _this = this,
                    el = par.elem;
                    el.remove();
                _this.valueList.pop();
                _this._reSize();
            },
            _getPosition : function () {
                if (!$(".share-name-item").length)
                    return !1;
                var el = $(".share-name-item").last(),
                    pos = el.position();
                return {
                    left : pos.left,
                    width : $(el).width()
                }
            },
            _reSize : function () {
                var _this = this,
                    pos = _this._getPosition();
                if (pos) {
                    var a = pos.left + pos.width +12;
                    a + 50 > _this.inputWidth && (a = 3)
                } else
                    var a = 3;
                _this.input.width(_this.inputWidth - a);
            },
            getValue : function(){
                return this.valueList;
            },
            getValueStr : function(){
                return this.valueList.join(",")
            },
            initData : function(){
                var _this = this,
                tempData = $.trim(_this.data).split(_this.delimiter),
                i = 0,len = tempData.length;
                for(;i<len;i++){
                    _this.addCard({name : tempData[i]});
                }
            }
        }
        return inputBlock;
    });
  • 相关阅读:
    PHP学习笔记(三)
    简单的学习心得:网易云课堂Android开发第六章SQLite与ContentProvider 熊,我
    简单的学习心得:网易云课堂Android开发第三章自定义控件 熊,我
    简单的学习心得:网易云课堂Android开发第五章SharedPreferences与文件管理 熊,我
    简单的学习心得:网易云课堂Android开发第四章服务、广播与酷特性 熊,我
    本地Server发布外网Web应用(Oray实现)
    玩玩微信公众号Java版之准备
    C语言的第零次作业
    C语言博客作业02循环结构
    C语言博客作业03函数
  • 原文地址:https://www.cnblogs.com/whitelist/p/5027404.html
Copyright © 2011-2022 走看看