亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery實現簡單的日期輸入格式化控件

2019-11-20 12:58:19
字體:
來源:轉載
供稿:網友

js代碼有一百多行。

先上效果圖

 html代碼

日期: <input type="text" id="dateInputer" class="hhm-dateInputer" placeholder="請輸入日期">

設置input元素類名為 hhm-dateInputer,通過這個類來綁定這個日期輸入控件。

js代碼

這里應用了jQuery的庫, 主要用于選擇元素和綁定事件。

復制代碼 代碼如下:

<script src=">

因為有大量的獲取和設置光標位置操作,用到了上一篇博客介紹的幾個工具函數。

復制代碼 代碼如下:

//獲取光標位置
function getCursor(elem) {
     //IE 9 ,10,其他瀏覽器
     if (elem.selectionStart !== undefined) {
         return elem.selectionStart;
     } else { //IE 6,7,8
         var range = document.selection.createRange();
         range.moveStart("character", -elem.value.length);
         var len = range.text.length;
         return len;
     }
 }
//設置光標位置
 function setCursor(elem, index) {
     //IE 9 ,10,其他瀏覽器
     if (elem.selectionStart !== undefined) {
         elem.selectionStart = index;
         elem.selectionEnd = index;
     } else { //IE 6,7,8
         var range = elem.createTextRange();
         range.moveStart("character", -elem.value.length); //左邊界移動到起點
         range.move("character", index); //光標放到index位置
         range.select();
     }
 }
//獲取選中文字
 function getSelection(elem) {
     //IE 9 ,10,其他瀏覽器
     if (elem.selectionStart !== undefined) {
         return elem.value.substring(elem.selectionStart, elem.selectionEnd);
     } else { //IE 6,7,8
         var range = document.selection.createRange();
         return range.text;
     }
 }
//設置選中范圍
 function setSelection(elem, leftIndex, rightIndex) {
     if (elem.selectionStart !== undefined) { //IE 9 ,10,其他瀏覽器
         elem.selectionStart = leftIndex;
         elem.selectionEnd = rightIndex;
     } else { //IE 6,7,8
         var range = elem.createTextRange();
         range.move("character", -elem.value.length); //光標移到0位置。
         //這里一定是先moveEnd再moveStart
         //因為如果設置了左邊界大于了右邊界,那么瀏覽器會自動讓右邊界等于左邊界。
         range.moveEnd("character", rightIndex);
         range.moveStart("character", leftIndex);
         range.select();
     }
 }

-------------------------            Boom!         -----------------------

先講講主要的思路。 其實是可以畫個圖這里的,不過我都不曉得該怎么畫,大家提提意見。

     首先找到類名為 hhm-dateInputer的元素。

     給它綁定兩個事件處理函數。 keydown、focus 、blur

  focus

    判斷如果input元素內容為空,那么設置其初始值為"____-__-__"

  blur  (感謝下面評論里小伙伴的建議,加上這個事件更加完美)

    判斷如果input元素內容為初始值"____-__-__",將其值置為空""

      keydown

    為什么不是keyup,而是keydown:  我們知道,keydown事件發生時,鍵盤上的字符還沒有輸入到輸入框中,這很重要。如果需要,我們在程序中就可以阻止不合適的字符輸入。

    1.首先從事件對象event中取得keyCode值,判斷為數字時,將數字后面的下劃線刪除一位。
    2.keyCode值代表刪除鍵時,刪除數字,添加一位下劃線。
    3.keyCode的其他情況返回false,阻止字符的輸入。

    上面一二步會用到setTimeout函數,在其中執行某些操作。 使用這個函數是因為keyup事件中按鍵字符實際還沒有作用到文本框中,setTimeout中的操作可以解決這個問題。

另外代碼中還有一個很重要的方法 resetCursor,程序中多次調用這個方法來把光標設置到合適的輸入位置。

復制代碼 代碼如下:

 //設置光標到正確的位置
 function resetCursor(elem) {
     var value = elem.value;
     var index = value.length;
     //當用戶通過選中部分文字并刪除時,此時只能將內容置為初始格式洛。
     if (elem.value.length !== dateStr.length) {
         elem.value = dateStr;
     }
     //把光標放到第一個_下劃線的前面
     //沒找到下劃線就放到末尾
     var temp = value.search(/_/);
     index = temp > -1 ? temp : index;
     setCursor(elem, index);
 }

完整的js代碼貼在下面咯。

復制代碼 代碼如下:

$(function(){
    var inputs = $(".hhm-dateInputer");
    var dateStr = "____-__-__";
    inputs.each(function(index,elem){
        var input = $(this);
        input.on("keydown",function(event){
            var that = this;   //當前觸發事件的輸入框。
            var key = event.keyCode;
            var cursorIndex = getCursor(that);
            //輸入數字
            if(key >= 48 && key <= 57){
                //光標在日期末尾或光標的下一個字符是"-",返回false,阻止字符顯示。
                if(cursorIndex == dateStr.length || that.value.charAt(cursorIndex) === "-") {return false;}
                //字符串中無下劃線時,返回false
                if(that.value.search(/_/) === -1){return false;}
                var fron = that.value.substring(0,cursorIndex); //光標之前的文本
                var reg = /(/d)_/;
                setTimeout(function(){ //setTimeout后字符已經輸入到文本中
                    //光標之后的文本
                    var end = that.value.substring(cursorIndex,that.value.length);
                    //去掉新插入數字后面的下劃線_
                    that.value = fron + end.replace(reg,"$1");
                    //尋找合適的位置插入光標。
                    resetCursor(that);
                },1);
                return true;
                //"Backspace" 刪除鍵
            }else if( key == 8){
                //光標在最前面時不能刪除。  但是考慮全部文本被選中下的刪除情況
                if(!cursorIndex && !getSelection(that).length){ return false;}
                //刪除時遇到中劃線的處理
                if(that.value.charAt(cursorIndex -1 ) == "-"){
                    var ar = that.value.split("");
                    ar.splice(cursorIndex-2,1,"_");
                    that.value = ar.join("");
                    resetCursor(that);
                    return false;
                }
                setTimeout(function(){
                    //值為空時重置
                    if(that.value === "") {
                        that.value = "____-__-__";
                        resetCursor(that);
                    }
                    //刪除的位置加上下劃線
                    var cursor = getCursor(that);
                    var ar = that.value.split("");
                    ar.splice(cursor,0,"_");
                    that.value = ar.join("");
                    resetCursor(that);
                },1);
                return true;
            }
            return false;
        });
        input.on("focus",function(){
            if(!this.value){
                this.value = "____-__-__";
            }
            resetCursor(this);
        });
        input.on("blur",function(){
            if(this.value === "____-__-__"){
                this.value = "";
            }
        });
    });
    //設置光標到正確的位置
    function resetCursor(elem){
        var value = elem.value;
        var index = value.length;
        //當用戶通過選中部分文字并刪除時,此時只能將內容置為初始格式洛。
        if(elem.value.length !== dateStr.length){
            elem.value = dateStr;
        }
        var temp = value.search(/_/);
        index =  temp> -1? temp: index;
        setCursor(elem,index);
        //把光標放到第一個_下劃線的前面
        //沒找到下劃線就放到末尾
    }
});
function getCursor(elem){
    //IE 9 ,10,其他瀏覽器
    if(elem.selectionStart !== undefined){
        return elem.selectionStart;
    } else{ //IE 6,7,8
        var range = document.selection.createRange();
        range.moveStart("character",-elem.value.length);
        var len = range.text.length;
        return len;
    }
}
function setCursor(elem,index){
    //IE 9 ,10,其他瀏覽器
    if(elem.selectionStart !== undefined){
        elem.selectionStart = index;
        elem.selectionEnd = index;
    } else{//IE 6,7,8
        var range = elem.createTextRange();
        range.moveStart("character",-elem.value.length); //左邊界移動到起點
        range.move("character",index); //光標放到index位置
        range.select();
    }
}
function getSelection(elem){
    //IE 9 ,10,其他瀏覽器
    if(elem.selectionStart !== undefined){
        return elem.value.substring(elem.selectionStart,elem.selectionEnd);
    } else{ //IE 6,7,8
        var range = document.selection.createRange();
        return range.text;
    }
}
function setSelection(elem,leftIndex,rightIndex){
    if(elem.selectionStart !== undefined){ //IE 9 ,10,其他瀏覽器
        elem.selectionStart = leftIndex;
        elem.selectionEnd = rightIndex;
    } else{//IE 6,7,8
        var range = elem.createTextRange();
        range.move("character",-elem.value.length);  //光標移到0位置。
        //這里一定是先moveEnd再moveStart
        //因為如果設置了左邊界大于了右邊界,那么瀏覽器會自動讓右邊界等于左邊界。
        range.moveEnd("character",rightIndex);
        range.moveStart("character",leftIndex);
        range.select();
    }
}

結束語

這個插件可能還有一些需要完善的地方。

  缺少通過js調用為元素綁定此插件的接口

  插件可能有些bug

上面的代碼如果有任何問題,請大家不吝賜教。

以上就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人欧美一区二区三区在线湿哒哒| 国产精品入口夜色视频大尺度| 国产精品美腿一区在线看| 日韩一二三在线视频播| 亚洲国产成人精品女人久久久| 久久久精品中文字幕| 亚洲欧美www| 欧美午夜精品在线| 国产精品欧美一区二区三区奶水| 欧美激情va永久在线播放| www.亚洲免费视频| 97视频在线看| 夜夜嗨av色综合久久久综合网| 亚洲天堂av电影| 国产日本欧美一区| 亚洲国产成人精品女人久久久| 国产精品久久久久aaaa九色| 日韩精品视频观看| 国产脚交av在线一区二区| 欧美高清电影在线看| 成人做爽爽免费视频| www.久久草.com| 欧美大全免费观看电视剧大泉洋| 国产精品第一第二| 日韩专区在线观看| 欧美成人激情图片网| 国产精品视频区| 91av视频在线| 亚洲国产小视频在线观看| 国内精品国产三级国产在线专| 久久久亚洲欧洲日产国码aⅴ| 日韩最新中文字幕电影免费看| 91视频九色网站| 日韩中文视频免费在线观看| 欧美疯狂做受xxxx高潮| 欧美激情免费在线| 成人福利在线观看| 国产精品96久久久久久又黄又硬| 欧美极品少妇xxxxⅹ裸体艺术| 91亚洲国产成人久久精品网站| 久久av在线看| 国产视频在线一区二区| 国产精品美女久久久久久免费| 国产亚洲成精品久久| 精品国内亚洲在观看18黄| 亚洲综合日韩中文字幕v在线| 奇米影视亚洲狠狠色| 国产亚洲视频中文字幕视频| 成人日韩在线电影| 亚洲福利视频在线| 国产91精品久久久久久| 久热精品视频在线观看一区| 亚洲天堂精品在线| 78色国产精品| 久久人人爽人人爽人人片av高请| 久久视频在线看| 综合av色偷偷网| 97国产在线观看| 亚洲精品在线91| 亚洲精品99久久久久中文字幕| 欧美性猛交xxxx| 亚洲欧美国产一区二区三区| 日韩精品视频在线免费观看| 日韩精品亚洲精品| 国产精品久久久久久五月尺| 青青a在线精品免费观看| 国产欧美精品在线播放| 91久久国产综合久久91精品网站| 欧美性猛交xxxx| 91免费精品国偷自产在线| 日韩av最新在线| 国产亚洲视频在线| 国模精品一区二区三区色天香| 91色在线观看| 亚洲一区二区三区xxx视频| 欧美精品免费播放| 日韩欧美在线视频日韩欧美在线视频| 精品五月天久久| 久久精品在线视频| 国产精品高清在线观看| 国产精品h在线观看| 深夜福利91大全| …久久精品99久久香蕉国产| 日韩专区在线播放| 91精品久久久久久久久久久久久久| 中文字幕在线亚洲| 黄色一区二区在线观看| 久久久视频免费观看| 亚洲精品免费网站| 精品国产视频在线| 欧洲成人免费aa| 日本精品久久久久影院| 欧美成人免费va影院高清| 国产成人综合亚洲| 亚洲在线视频观看| 最近2019中文字幕在线高清| 久久久久国产一区二区三区| 欧美一级大片在线观看| 美女福利精品视频| 自拍偷拍亚洲在线| 国产精品日韩精品| 自拍偷拍亚洲欧美| 亚洲国产天堂久久综合网| 亚洲精品国产精品乱码不99按摩| 一区二区三区视频免费| 超碰日本道色综合久久综合| 国产精品丝袜久久久久久不卡| 亚洲最大的成人网| 国产在线精品播放| 亚洲aaa激情| 亚洲欧美精品一区| 成人福利在线观看| 欧美成人一二三| 97人人爽人人喊人人模波多| 欧美激情xxxx| 国产成人a亚洲精品| 综合网日日天干夜夜久久| 国产一区二区日韩精品欧美精品| 久久久免费在线观看| 欧美一级片免费在线| 日韩经典一区二区三区| 精品久久久久久中文字幕一区奶水| 日韩欧美在线播放| 精品视频久久久| 国产精品久久久久久婷婷天堂| 清纯唯美亚洲激情| 亚洲午夜国产成人av电影男同| 日韩美女福利视频| 国产亚洲精品美女久久久久| 亚洲国产成人精品久久久国产成人一区| 欧美日韩成人在线视频| 国产成+人+综合+亚洲欧洲| 精品久久久久久中文字幕大豆网| 另类图片亚洲另类| 欧美日韩另类在线| 欧美日韩中文字幕综合视频| 国产美女高潮久久白浆| 成人久久久久爱| 91久久夜色精品国产网站| 成人黄色免费在线观看| 欧美午夜精品在线| 岛国av一区二区| 91久久在线视频| 日本高清视频精品| 亚洲乱码一区二区| 亚洲毛片在线观看| 色综合亚洲精品激情狠狠| 国产精品一区久久久| 亚洲精品日韩激情在线电影| 国产一区红桃视频| 国产精品视频自在线| 国产性色av一区二区| 日本sm极度另类视频| 国产九九精品视频| 成人精品福利视频| 国产日韩换脸av一区在线观看| 伊人成人开心激情综合网| 成人精品视频99在线观看免费| 久久视频在线视频| 97国产在线观看| 免费成人高清视频| 91久久综合亚洲鲁鲁五月天| 蜜臀久久99精品久久久无需会员| 亚洲伊人久久综合|