zoukankan      html  css  js  c++  java
  • text time limit

    前端时间搞一个页面, 一个文本框需要绑定一个datepicker,

    由于bootstrap + 乱七八糟定义一堆的css, 哪个日期控件上来都乱了套了, 后来闲下来写了一个限制文本输入的jquery插件, 总结:

    1. 对js真是无爱啊

    2. 我写的这东西也就是给程序员用的

    绑定插件:

    $('text').datetimelimit();

    现在就这一种时间格式.

    操作方式:

    1, 选定文本框, 按tab可以在每个域跳转

    2, 在某个域内按上下键, 可以进行 +1, -1操作

    3, 在某个域内输入数字, 可以改变相关值

    4, 其它输入屏蔽

    代码奉上

    $.fn.datetimelimit = function(defaultTime){
            function stringToDate(s){ //字符串转时间
                var l = s.match(/(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})/);
                if (l){
                    l = l.slice(1);
                    var d = new Date();
                    d.setFullYear(l[0], l[1]-1, l[2]);
                    d.setHours(l[3], l[4], l[5]);
                    return d;
                }
            }
            function dateToString(date){ //时间转字符串
                if (date==undefined){
                    var date = new Date();
                }
                return ('000'+date.getFullYear()).substr(-4)+"-"+
                    (date.getMonth()<9?"0":"")+(date.getMonth()+1)+"-"+
                    (date.getDate()<10?"0":"")+date.getDate()+" "+
                    (date.getHours()<10?"0":"")+date.getHours()+":"+
                    (date.getMinutes()<10?"0":"")+date.getMinutes()+":"+
                    (date.getSeconds()<10?"0":"")+date.getSeconds();
                
            }
            function selectionMark(index){ //在文本框内光标指定的刻度
                if (index<5) {return 0;} //year
                if (index>=5&&index<8){return 1;} //month
                if (index>=8&&index<11){return 2;} //day
                if (index>=11&&index<14){return 3;} //hour
                if (index>=14&&index<17) {return 4;} //minute
                return 5; //second
            }
            function getSelectionRange(markIndex){  //根据刻度推算文本范围
                switch (markIndex){
                    case 0: return [0,4];break;
                    case 1: return [5,7];break;
                    case 2: return [8, 10];break;
                    case 3: return [11, 13];break;
                    case 4: return [14, 16];break;
                    case 5: return [17, 19];break;
                } 
            }
            function changeDateStep(target, cursorIndex, isAdd){  //对时间做小范围 +-1操作
                var date = stringToDate($(target).val());
                if (!date){return false;} 
                var isAdd = (isAdd==undefined)?true:isAdd;
                switch(selectionMark(cursorIndex)){
                    case 0: date.setFullYear(isAdd?date.getFullYear()+1:date.getFullYear()-1);break;
                    case 1: date.setMonth(isAdd?date.getMonth()+1:date.getMonth()-1);break;
                    case 2: date.setDate(isAdd?date.getDate()+1:date.getDate()-1);break;
                    case 3: date.setHours(isAdd?date.getHours()+1:date.getHours()-1);break;
                    case 4: date.setMinutes(isAdd?date.getMinutes()+1:date.getMinutes()-1);break;
                    default: date.setSeconds(isAdd?date.getSeconds()+1:date.getSeconds()-1);
                };
                var cstart = target.selectionStart;
                var cend = target.selectionEnd;
                $(target).val(dateToString(date));
                target.selectionEnd = cend;
                target.selectionStart = cstart;
                return false;
            }
            function changeDate(target, cursorIndex, value){  //修改时间
                var date = stringToDate($(target).val());
                if (!date){return false;} 
                switch(selectionMark(cursorIndex)){
                    case 0: 
                        date.setFullYear(date.getFullYear()%1000*10+value);
                        break;
                    case 1: 
                        var newValue = (date.getMonth()+1)%10*10+value;
                        date.setMonth(newValue>12?newValue%10-1:newValue-1);
                        break;
                    case 2: 
                        var newValue = date.getDate()%10*10+value;
                        date.setDate((newValue > new Date(date.getFullYear(), date.getMonth(), 0).getDate())?newValue%10:newValue);
                        break;
                    case 3: 
                        var newValue = date.getHours()%10*10+value;
                        date.setHours(newValue>23?newValue%10:newValue);
                        break;
                    case 4: 
                        var newValue = date.getMinutes()%10*10+value;
                        date.setMinutes(newValue>59?newValue%10:newValue);
                        break;
                    default: 
                        var newValue = date.getSeconds()%10*10+value;
                        date.setSeconds(newValue>59?newValue%10:newValue);
                };
                var cstart = target.selectionStart;
                var cend = target.selectionEnd;
                $(target).val(dateToString(date));
                target.selectionEnd = cend;
                target.selectionStart = cstart;
                return false;
            }
            if (defaultTime){
                $(this).val(defaultTime);
            }
            else{
                $(this).val(dateToString());
            }
            $(this).keydown(function(event){
                console.log(event.keyCode + "---" + event.which)
                var cursorIndex = this.selectionEnd;
                switch (event.which){
                    case 38: //up
                        return changeDateStep(this, cursorIndex, true);
                    case 40: //down
                        return changeDateStep(this, cursorIndex, false);
                    case 9: //tab
                        var mark = selectionMark(cursorIndex);
                        var sr = getSelectionRange((mark<5)?mark+1:0);
                        this.setSelectionRange(sr[0], sr[1]);
                        return false;
                    case 37: //left
                    case 39: //right
                        return;
                }
                if (event.which>=48&&event.which<=57){
                    var numkey = event.which - 48;
                    return changeDate(this, cursorIndex, numkey);
                }
                if (event.which>=96&&event.which<=105){
                    var numkey = event.which - 96;
                    return changeDate(this, cursorIndex, numkey);
                }
                
                return false;
            })
        }

    卖个萌!  

  • 相关阅读:
    眼手组合-眼低手低者
    MongoDB、redis、memcached
    CAS单点登录配置 .
    Static attribute must be a String literal
    myeclipse 导包快捷键
    java生成json总结
    weblogic部署错误:weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory
    xfire+spring webservice
    java中获取当前路径(转)
    MyEclipse使用指南(精简版) (转)
  • 原文地址:https://www.cnblogs.com/c9com/p/2536896.html
Copyright © 2011-2022 走看看