【问题标题】:Automatic colon in time field in form表单中时间字段中的自动冒号
【发布时间】:2017-07-24 02:57:44
【问题描述】:

我有以下要求,如果没有手动输入这种格式 hh:mm:ss

,表单的时间字段应该自动添加冒号

我有下面的代码,它可以很好地自动填充,但是如果用户手动键入冒号,它会添加两个冒号,例如 hh::m:ss

有人可以帮忙解决这个问题吗?

JSP:

<b:form-group label="${runtime}" labelFor="runtime" cssLabel="col-sm-2" cssBody="col-sm-2" cssClass="required">
    <form:input path="runTime" cssClass="form-control" required="required" maxlength="8"/>
    <form:errors path="runTime" cssClass="validate-error"/>
</b:form-group>

JS:

$('#runTime').on('keydown', function(e) {
    if(e.keyCode != 8 && (this.value.length === 2 || this.value.length === 5)) {
        this.value += ":";
    }
});

更新答案

我们必须在以 chiliNUT 回答折叠之前添加额外的检查,否则全选并点击删除/退格按钮在 Chrome 浏览器中不起作用。

$('#runTime').on('keydown', function(e) {
    //your code
    if(e.keyCode != 8 && (this.value.length === 2 || this.value.length === 5)) {
        this.value += ":";
    }
    //collapse double colons
    if(this.value.endsWith("::")) {
        this.value=this.value.replace(/:+/g,":");
    }
});

【问题讨论】:

  • 我会关闭自动提交,然后在点击处理程序中格式化您的时间。这样你就可以摆脱 keydown 处理程序。尝试通过 keydown 处理程序进行管理是一件令人头疼的事情。
  • 双重执行没有问题,不知何故我需要避免从键盘输入冒号。它应该始终由脚本添加。

标签: javascript jquery


【解决方案1】:

keydown 后折叠双冒号

$('#runTime').on('keydown', function(e) {
    //your code
    if(e.keyCode != 8 && (this.value.length === 2 || this.value.length === 5)) {
        this.value += ":";
    }
    //collapse double colons
    this.value=this.value.replace(/:+/g,":");
});

最后一行将查看字符串,然后采用 1 个或多个冒号(连续冒号?:-))的任何实例并将其转换为单个冒号

【讨论】:

  • 如果您改为对 'keyup' -event 执行操作,输入后将直接更正双冒号。如果你把它放在'keydown'上,它不会检测到多个冒号,直到下一次按键......
  • @JesperWilfing 为什么你的评论以“...”结尾,你还有什么要补充的吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多