【问题标题】:Implementing a range in HTML time input在 HTML 时间输入中实现范围
【发布时间】:2018-03-07 14:47:35
【问题描述】:

我被要求帮助修复一个主要是 python(运行 Flask)的 Web 应用程序中的错误,这是我所知道的,也是我愿意提供帮助的原因。但是我的 HTML 知识非常糟糕,我需要帮助。我已经修复了 python 代码中的错误,但我想确保用户找不到更多方法来破坏应用程序。它与用户输入交易时间的 HTML 表单有关。输入是带有占位符“hh:mm:ss”的文本格式,但这并不能阻止他们输入除该格式的时间以外的各种内容。如果我从一开始就这样做,我会将此字段设置为“时间”格式,但有太多事情取决于它是一个文本字段,因为我宁愿只在此文本输入字段上设置一些验证。

这段代码是:

<input type="text" name="time_left" id="time_left" placeholder="hh:mm:ss">

唯一的限制是时间不能小于00:00:00,不能大于01:30:00。我很想在这里某个地方放一个最小/最大属性,但我怀疑它是否那么简单。特别是它是文本。

谁能告诉我我能做什么(越简单越好,正如我所说,我不太擅长 HTML)

【问题讨论】:

    标签: html validation text input time


    【解决方案1】:

    对于仅 HTML5 的解决方案,有两种方法。一种是使其成为type="time" 输入。它的值仍然可以使用input.value 作为字符串读取,如果您对此有任何担心的话。

    <input type="time" min="00:00:00" max="01:30:00">
    

    浏览器将允许steps of 1 minute。如果您需要第二精度,请添加 step="1"

    另一种解决方案是添加pattern属性:

    <input type="text" pattern="0(1:30:00|1:[012][0-9]:[0-5][0-9]|0:[0-5][0-9]:[0-5][0-9])">
    

    两种解决方案都是可行的,各有优缺点。

    后者将有更好的浏览器支持,但要获得接近 100% 的支持,无论哪种方式,您都需要一个 JS 库来接管浏览器。我写了Hyperform,可以做到这一点(甚至更多),但如果只是这个字段,你最好编写自己的事件处理程序并将其附加到该输入字段的change 事件。

    编辑:pattern 属性中的正则表达式将区分由| 分隔的几种情况。第一个也是最简单的是最大时间01:30:00。接下来是 01:00 到 01:29:59 的时间,最后是 00:00 到 00:59:59 的时间。

    【讨论】:

    • 我使用了第二个选项,它做了我想要的。谢谢!我现在只是在页面上添加一个描述,让用户知道这是他们被允许的范围。不紧急,但有没有办法让前导 0 可选?比如: ...什么的
    • 是的,0? 应该可以正常工作。 pattern 属性的内容基本上是 Javascript 所理解的正则表达式,隐式以 ^ 开头并以 $ 结尾。
    • 酷,有什么方法可以将消息从“请匹配请求的格式”更改为更具体的内容(而不是在页面上添加描述)
    • 添加title 属性。这将用作错误消息的一部分:html.spec.whatwg.org/multipage/input.html#attr-input-title
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多