Javascript 如何检测type=time的输入是否输入了任何值

Javascript 如何检测type=time的输入是否输入了任何值,javascript,html,forms,Javascript,Html,Forms,我有一个javascript脚本,它应该在type=time的html表单输入中输入任何值时进行检测 但是,每当我输入一个部分值(例如,键入一个数字)时,它不会检测到输入值,而不是AM/PM的完整时间 在下面的示例中,timeSelector是type=time的输入 有没有办法检测到这种东西 为了澄清这一点,显然我的问题问得不够清楚,因此我需要检测时间输入何时输入了某个内容,即使该内容是无效或不完整的输入。根据关于输入元素和类型时间的规范: 值属性(如果指定且不为空)必须具有有效时间字符串的值

我有一个javascript脚本,它应该在type=time的html表单输入中输入任何值时进行检测

但是,每当我输入一个部分值(例如,键入一个数字)时,它不会检测到输入值,而不是AM/PM的完整时间

在下面的示例中,timeSelector是type=time的输入

有没有办法检测到这种东西

为了澄清这一点,显然我的问题问得不够清楚,因此我需要检测时间输入何时输入了某个内容,即使该内容是无效或不完整的输入。

根据关于输入元素和类型时间的规范:

值属性(如果指定且不为空)必须具有有效时间字符串的值

如果元素的值不是有效的时间字符串,则将其改为空字符串

这意味着在填写整个时间字段之前,不会发生输入和更改事件。为什么?因为一切都没有改变

您可能认为可以通过使用keydown或keyup事件来规避此问题,但事实并非如此

该值不会更改,因此在时间输入框中包含能够解析为时间的完整字符串之前无法访问

通过填写下面的示例,您可以看到事件是如何触发的。请注意,在填写所有内容之前,都没有价值

设i=document.querySelectorinput, on=type=>i.addEventListenertype,函数{console.log`${type},值:${i.value}`;}; onkeydown; onkeyup; 一旦改变; 输入端;
html5输入的问题是,如果输入无效,他们不会在输入中给出文本。因此,当用户从元素中移除焦点时,可以使用checkValidity

var checkInput=函数{ var值=此.value var isValid=this.checkValidity 如果!this.value.length&&有效{ console.log'empty'; }否则,如果!this.value.length&&!有效{ 控制台。日志“输入的时间无效” }否则{ 控制台。记录“输入的有效时间” } } var输入=document.queryselector输入 input.addEventListenerinput,checkInput input.addEventListenerblur,检查输入
这是因为1是无效时间,无效时间不返回值。这就是数字、日期和时间输入的工作方式。您仍然没有发布足够的信息,我们无法帮助您。HTML在哪里?调用您发布的if语句的代码在哪里?这段JavaScript代码在哪里?@epascarello感谢您与实际问题进行交流。我明白你的意思。我的问题是,我如何检测这种类型的部分/无效输入?编辑:为了澄清,我指的是上一个问题之前的你的问题。你可能认为它们不相关,但我们相关。如果没有您正在做的事情的完整图片,我们无法知道您的问题是简单的打字错误还是完全其他的问题。您可以随意争辩,但如果没有相关代码,我们所能做的就是提供有根据的猜测。读了这个答案后,我意识到我的问题问得不够清楚,而不是争论。你的回答非常清楚和简洁地回答了我提出的问题,但不幸的是,不是我想问的问题。我在问题的末尾加了一个说明。你可以知道是否输入了什么,但你不能知道输入了什么。更新了3个州的问题。这很有帮助。非常感谢。需要注意的一点是,如果元素是必需的,那么这将不起作用,因此最好在检查有效性之前设置this.required=false,在检查有效性之后设置this.required=true。
if (timeSelector.value == "") {
    timeSelector.classList.add("empty");
} else {
    timeSelector.classList.remove("empty");
}