首页 web前端 js教程 jQuery实现简单的日期输入格式化控件_jquery

jQuery实现简单的日期输入格式化控件_jquery

May 16, 2016 pm 04:10 PM
jquery 控件 格式化

js代码有一百多行。

先上效果图

 html代码

日期:

设置input元素类名为 hhm-dateInputer,通过这个类来绑定这个日期输入控件。

js代码

这里应用了jQuery的库, 主要用于选择元素和绑定事件。

复制代码 代码如下:

">http://code.jquery.com/jquery-1.9.1.min.js">>

因为有大量的获取和设置光标位置操作,用到了上一篇博客介绍的几个工具函数。

复制代码 代码如下:

//获取光标位置
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                 //光标在日期末尾或光标的下一个字符是"-",返回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

上面的代码如果有任何问题,请大家不吝赐教。

以上就是本文的全部内容了,希望大家能够喜欢。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
两个点博物馆:所有展览以及在哪里可以找到它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

手机格式化恢复方法大揭秘(手机故障?别急) 手机格式化恢复方法大揭秘(手机故障?别急) May 04, 2024 pm 06:01 PM

现如今,无法开机等,卡顿,我们难免会遇到一些问题,比如系统崩溃、但在使用过程中、手机已成为我们生活中不可或缺的一部分。我们往往束手无策、而有时、对于这些问题的解决方法。帮助你解决手机故障,本文将为大家介绍一些手机格式化恢复的方法、让手机重新恢复正常运行。备份数据——保护重要信息安全通讯录等,如照片、联系人、以免在格式化过程中丢失、在进行手机格式化之前、首先要考虑的是备份手机上的重要数据和文件。确保数据的安全性、或者选择将文件传输至云存储服务中,可以通过连接电脑进行备份。使用系统自带恢复功能——简

jQuery如何移除元素的height属性? jQuery如何移除元素的height属性? Feb 28, 2024 am 08:39 AM

jQuery如何移除元素的height属性?在前端开发中,经常会遇到需要操作元素的高度属性的需求。有时候,我们可能需要动态改变元素的高度,而有时候又需要移除元素的高度属性。本文将介绍如何使用jQuery来移除元素的高度属性,并提供具体的代码示例。在使用jQuery操作高度属性之前,我们首先需要了解CSS中的height属性。height属性用于设置元素的高度

jQuery中如何使用PUT请求方式? jQuery中如何使用PUT请求方式? Feb 28, 2024 pm 03:12 PM

jQuery中如何使用PUT请求方式?在jQuery中,发送PUT请求的方法与发送其他类型的请求类似,但需要注意一些细节和参数设置。PUT请求通常用于更新资源,例如更新数据库中的数据或更新服务器上的文件。以下是在jQuery中使用PUT请求方式的具体代码示例。首先,确保引入了jQuery库文件,然后可以通过以下方式发送PUT请求:$.ajax({u

html格式化的方法有哪些 html格式化的方法有哪些 Mar 08, 2024 am 09:53 AM

html格式化方法:1、使用在线HTML格式化工具;2、使用代码编辑器自带的HTML格式化快捷键,如Visual Studio Code中的Shift + Alt + F;3、使用插件,如Sublime Text中的HTML/CSS/JS Prettify插件;4、使用命令行工具,如HTML Tidy;5、手动格式化,按照编码规范和习惯进行手动格式化。

jQuery小技巧:快速修改页面所有a标签的文本 jQuery小技巧:快速修改页面所有a标签的文本 Feb 28, 2024 pm 09:06 PM

标题:jQuery小技巧:快速修改页面所有a标签的文本在网页开发中,我们经常需要对页面中的元素进行修改和操作。在使用jQuery时,有时候需要一次性修改页面中所有a标签的文本内容,这样可以节省时间和精力。下面将介绍如何使用jQuery快速修改页面所有a标签的文本,同时给出具体的代码示例。首先,我们需要引入jQuery库文件,确保在页面中引入了以下代码:&lt

使用jQuery修改所有a标签的文本内容 使用jQuery修改所有a标签的文本内容 Feb 28, 2024 pm 05:42 PM

标题:使用jQuery修改所有a标签的文本内容jQuery是一款流行的JavaScript库,被广泛用于处理DOM操作。在网页开发中,经常会遇到需要修改页面上链接标签(a标签)的文本内容的需求。本文将介绍如何使用jQuery来实现这个目标,并提供具体的代码示例。首先,我们需要在页面中引入jQuery库。在HTML文件中添加以下代码:

怎么把win10系统格式化重装系统_把win10系统格式化重装系统教程 怎么把win10系统格式化重装系统_把win10系统格式化重装系统教程 Mar 21, 2024 pm 04:56 PM

现在win10系统电脑安全会受到很多病毒与程序的威胁,我们拿一个典型的例子来说,他在上网时会无意点开一个连接或着是网站,之后我们电脑就莫名其妙的弹出一些很烦人的广告或是电脑卡在界面动不了,这就很可能是被恶意捆绑安装了某些软件了,还有一个情况就是电脑中病毒了。如果出现这种问题,我们就可以给win10系统电脑重装系统,他可以有效去除掉系统盘里的病毒程序,现在下面小编就带大家win10系统格式化重装系统方法,大家一起往下看。1.怎么把win10系统格式化重装系统呢,首先我们点击“开始”-

如何判断jQuery元素是否具有特定属性? 如何判断jQuery元素是否具有特定属性? Feb 29, 2024 am 09:03 AM

如何判断jQuery元素是否具有特定属性?在使用jQuery操作DOM元素时,经常会遇到需要判断元素是否具有某个特定属性的情况。这种情况下,我们可以借助jQuery提供的方法来轻松实现这一功能。下面将介绍两种常用的方法来判断一个jQuery元素是否具有特定属性,并附上具体的代码示例。方法一:使用attr()方法和typeof操作符//判断元素是否具有特定属

See all articles