从chrome中输入HTML5输入[type ="date"]的输入值

Max*_*rty 6 javascript html5 google-chrome

在chrome中,标签就像

<input id="picker" type="date">
Run Code Online (Sandbox Code Playgroud)

呈现为文本字段.然而,呼吁尝试用类似的东西来获得它的价值

$("#picker").val()
Run Code Online (Sandbox Code Playgroud)

在输入有效日期或从其下拉列表中选择有效日期之前,不会返回任何内容.我看了一下按键的所有对象的直接属性

$("#picker").keypress(function() {
    var output = ""
    for (var i in this) {       
        output += i +" value:"+ this[i] + "\n";
    }
    alert(output);
});?
Run Code Online (Sandbox Code Playgroud)

但无法看到我在这些方面的意见.在http://jsfiddle.net/5cN2q/上自己检查一下

我的问题是:当输入不是有效日期时,是否可以从chrome中输入[type ="date"]获取文本?

Fab*_*tté 4

W3C日期状态规范定义了清理算法:

  • 值清理算法如下:如果元素的值不是有效的日期字符串,则将其设置为空字符串。

每当设置输入元素的值时都会调用它,如DOM 输入值规范中所定义:

  • 获取时,它必须返回元素的当前值。设置时,它必须将元素的值设置为新值,将元素的脏值标志设置为 true,如果元素的 type 属性的当前状态定义为 1,则调用值清理算法,然后,如果元素具有文本输入光标位置,应将文本输入光标位置移动到文本字段的末尾,取消选择任何选定的文本并将选择方向重置为无。

因此,value当日期无效时,该属性将始终为空字符串。似乎没有指定“原始/脏/用户输入的文本值”的任何属性,因为它毕竟不是文本输入。

在我看来,这是一件好事,它有助于表单验证,因为无效日期被视为虚假值(空字符串),它还使浏览器能够更自由地实现日期输入的 UI。

如果您更喜欢非 W3C 日期输入,则可以将文本输入与旧式 JS 日期验证和日期选择器结合使用,例如jQuery UI datepicker。这将允许您检索输入的实际文本值,并且也是一个更加跨浏览器的解决方案。