js是实现键盘设置日期(input)

2023-11-01

本功能是基于封装的datetime-input框进行的二次封装,加上上下左右修改日期的功能,只提供一种思路。

前端框架aurelia

formatString

formatString country
MM/DD/YY h:mm A USA
DD.MM.YY HH:mm German
DD/MM/YY H:mm Mexico
DD/MM/YY h:mm A India
YY/MM/DD HH:mm Chinese
YY/MM/DD HH:mm Japanese

formatString为当前浏览器的日期格式,在点击相应的时,分,秒时需返回相关range的字符(selectKey)来进行日期的加减以及range的设置。

selectKey

将selectKey设置为@bindable, 意思是可以从外部传入组件内部,aurelia自带一个方法可以实时监听@bindable值的变化,使用selectKeyChanged可以监听。

  • 功能:
    • 监听变化
    • 设置range
    • 获取当前key的value
    • 获取当前value的长度
    • 获取当前key的range

selectKey默认为formatString[0],意为日期格式的第一个字符。

selectKeyChanged

在selectKey发生变化之后,会重新调用setSelectionByKey来设置当前range
当前range设置方式为,通过getSelectionRangeByKey返回的光标start与end位置,调用setSelectionRange原生方法设置选中range

setSelectionByKey

let [selectStart, selectEnd] = this.getSelectionRangeByKey(selectKey);
调用setSelectionRange原生方法设置选中range

getSelectionRangeByKey

根据不同的key,以key在formatString第一个出现的位置为start,进行循环,直至遍历到非key的位置结束,为end
返回[start,end]作为range设置范围

由于一般情况下Y/M/D 格式固定,可以通过一个循环传入key决定
小时存在四种情况,h/H/hh/HH,可以归并为一位和两位的情况,一位时timevalue与formatString长度不符,不可以使用循环返回,要单独判断,h之后的m和A也要随着h的长度而单独判断。

onKeyDown

  1. enter
  2. esc/escape
  3. ArrowDown
    decrease
    saveCurrentDate
  4. ArrowUp
    increase
    saveCurrentDate
  5. ArrowRight
    saveCurrentDate
    findNearbyKey return ->newKey -> selectKeyChanged-> resetRange
  6. ArrowLeft

increase/decrease

传入selectKey,operation,timeValue
除了selectKey为A时单独判断外(+12,-12),其余为+1,-1(Moment方法)

findNearbyKey

根据formatString遍历

saveCurrentDate

在不失焦的时候保存当前value

onClick

this.selectKey = this.getCurrentSelectionKey(e);

getCurrentSelectionKey

通过点击的位置,

  • 超过formatString长度selectStart - 1(h情况)
  • selectKey.match(/[^\w]+/),非字母数字下划线情况-1
  • h为一位时H,M,D单独判断(通过判断key的个数,:的位置综合判断)

其他

getInputStringByKey

sum

valueChanged

isWithinLimit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js是实现键盘设置日期(input) 的相关文章

随机推荐

  • 英语词汇表

    A a an art 一 个 件 abandon v 放弃 抛弃 ability n 能力 才能 able a 能够 有能力的 abnormal a 不正常的 aboard prep 在 或上 船 飞机 火车等 abolish v 废除 a
  • 自连接表 ——《二级关注者》LeetCode Plus 会员专享题【详细解析】Hive / MySQL

    大家早上好 本人姓吴 如果觉得文章写得还行的话也可以叫我吴老师 欢迎大家跟我一起走进数据分析的世界 一起学习 感兴趣的朋友可以关注我的数据分析专栏 里面有许多优质的文章跟大家分享哦 另外也欢迎大家关注我的SQL刷题专栏 里面有我分享的高质量
  • windows环境python2.7安装pyinstaller

    作者环境 windows10 python2 7 直接使用pip install pyinstaller安装会报错 一开始是报pip版本过低 按照提示命令升级pip版本后又提示以下错误 到这里请跳到下面第5点尝试操作 如果不行 再回到这里阅
  • 正确实现 IDisposable 接口

    正确实现 IDisposable NET中用于释放对象资源的接口是IDisposable 但是这个接口的实现还是比较有讲究的 此外还有Finalize和Close两个函数 MSDN建议按照下面的模式实现IDisposable接口 NET的对
  • MapReduce(一):FileInputFormat源码解析

    来源 https www bilibili com video av36033875 from search seid 12700632591522714293 FileInputFormat切片机制 1 job提交流程源码详解 主要代码流
  • 虚拟内存有什么用

    虚拟内存是什么 虚拟内存别称虚拟存储器 Virtual Memory 电脑中所运行的程序均需经由内存执行 若执行的程序占用内存很大或很多 则会导致内存消耗殆尽 为解决该问题 Windows中运用了虚拟内存技术 即匀出一部分硬盘空间来充当内存
  • 【threejs效果:模型炸开】以钢铁侠obj模型为例

    1 效果如下 2 基本原理 首先加载一个obj模型 然后遍历obj模型的所有children mesh 按一定比例改变每个子mesh的中心点位置即可 爆炸代码 function modelExplode num 模型世界中心 var mod
  • 游戏资源贴

    转载自 http www gamedev net community forums topic asp topic id 324643 Ok so the point of this thread is simple to list as
  • Linux 6.6 中的 SELinux 删除了 NSA 的引用

    导读 Security Enhanced Linux SELinux 二十年来一直是主线内核的一部分 它提供了一个实现访问控制安全策略的模块 现在广泛用于增强生产 Linux 服务器和其他系统的安全性 长期接触 Linux 的人可能不知道
  • Java应用程序安全框架

    从零打造项目 系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 SpringBoot集成MybatisPlus项目实
  • openGL之API学习(八十四)glGetObjectLabel

    获取命名空间对象的标签 打标签由函数glObjectLabel执行 void glGetObjectLabel GLenum identifier GLuint name GLsizei bufSize GLsizei length cha
  • HTTP反爬困境

    尊敬的程序员朋友们 大家好 今天我要和您分享一篇关于解决反爬困境的文章 在网络爬虫的时代 许多网站采取了反爬措施来保护自己的数据资源 然而 作为程序员 我们有着聪明才智和技术能力 可以应对这些困境并确保数据的安全性 本文将重点介绍如何通过H
  • 如何把简单的事情一次做对?

    在工作中领导最讨厌的人就是总把简单的事情做错的下属 在绝大多数人不会犯错的地方犯错 在领导眼中会判定为是基本素质问题 是不可原谅的 如果组织要裁员 那优先裁掉的就是哪些总是犯低级错误的人 那如何确保能够把简单的事情一次做对 提升自己的职场竞
  • 好用用的linux 监控命令

    1 dstat 命令 参考http www cnblogs com vincent hv p 3358194 html dstat的基本使用 2 1 dstat的默认选项 与许多命令一样 dstat命令有默认选项 执行dstat命令不加任何
  • Angular_与服务器通讯(Websocket通讯)

    在上一篇文章中 我们创建了server服务 在那个项目中我们继续添加websocket服务 npm install ws save 然后安装types格式的 npm install types ws save dev 实现场景 编写服务端
  • “终于懂了” 系列:组件化框架 ARouter 完全解析(二)APT技术

    ARouter系列文章 终于懂了 系列 组件化框架 ARouter 完全解析 一 原理全解 终于懂了 系列 组件化框架 ARouter 完全解析 二 APT 帮助类生成 终于懂了 系列 组件化框架 ARouter 完全解析 二 AGP Tr
  • 物理服务器向虚拟化无缝对接,服务器虚拟化下的网络变迁

    一个风起 云 涌的IT时代 展现的是一种全新的动态IT基础设施 和传统的IT基础设施相比 虚拟化成为目前整个IT基础架构的变革性创新技术 对计算 存储 网络都产生了长远的影响 在数据中心等场景中引入虚拟化技术之后 服务器接入网络的位置往往是
  • C++基础——类与对象的讲解2

    目录 一 类域 二 计算类的大小 类存储方式一 类中包含各个成员 包括函数在内 类存储方式二 类的存储方式三 练习题 三 C 结构内存对齐规则 一 类域 其实类也是个域 拥有一对花括号 它与我们之前学习的命名空间域有相似之处 但也大有不同
  • ovftool工具的使用

    1 工具下载地址 https customerconnect vmware com zh downloads details downloadGroup OVFTOOL440 productId 974 download true file
  • js是实现键盘设置日期(input)

    本功能是基于封装的datetime input框进行的二次封装 加上上下左右修改日期的功能 只提供一种思路 前端框架aurelia formatString formatString country MM DD YY h mm A USA