【发布时间】:2013-08-06 08:56:09
【问题描述】:
我有一个 HTML5 日期输入,我希望它的值默认设置为我的模型中日期属性的值。我对格式并不太挑剔,因为 Chrome 似乎会根据我的语言环境为我决定,但理想情况下格式应该是一致的 dd/MM/yyyy。
这就是我设置输入的方式:
<input type="date"
ng-model="date"
value="{{ date | date: 'yyyy-MM-dd' }}" />
这在 Chrome 上运行良好,默认情况下我会看到以下内容:
(我仍然不太明白为什么必须在 yyyy-MM-dd 中给出值,如果 Chrome 仍然根据我的语言环境对其进行格式化,但这是一个不同的问题。)
我的问题是 Firefox 没有按照我指定的方式显示日期值。我认为这与将输入绑定到date 模型有关,因为我可以在value 属性中指定几乎任何字符串,并且默认情况下我仍然会在输入中看到长日期字符串:
如果我从输入标签中删除ng-model="date",Firefox 会很好地显示我给它的任何值。我不认为输入绑定的模型实际上对其默认值有任何影响?
我知道日期输入不受普遍支持,但鉴于它应该依赖于简单的文本输入,我不明白为什么它的值不会只是 2013-08-05,正如 angular 的日期所指定的那样过滤器。
那么,如何让 Firefox 在日期输入中接受我的格式化值?
注意 在用户完成编辑后,我当然会执行验证并将每个日期输入值转换为正确的Date 对象。不确定这是否与问题相关,但将其放在那里以防万一,因为输入格式显然需要保持一致,以便日期转换在所有浏览器中都一样。当然,Chrome 为我决定输入格式是有问题的......
【问题讨论】:
-
您在初始化时是否尝试过正确的格式(如此处:jsfiddle.net/DotDotDot/Vq65z/7)?可能是这样的:
$scope.date = $filter('date')(new Date(),'MM/dd/yyyy') -
@DotDotDot 这很好用,因为在这种情况下日期将是一个字符串。但是,我更喜欢将日期作为实际的 javascript 日期对象,因为我需要以各种方式对其进行操作,而且它也更具语义性。但基本上你的建议是我目前的黑客,是的。我为输入绑定的模型及其值使用了一个临时字符串,并将其转换为表单提交的日期。
-
我不同意闭包,因为它是一个主题,描述了重现它的代码问题,并说明了问题所在。
标签: javascript html forms date angularjs