【问题标题】:angularjs $valid on dates reports incorrectly in firefoxangularjs $valid on dates 在 Firefox 中报告不正确
【发布时间】:2015-04-08 11:09:57
【问题描述】:

我注意到 Firefox 中日期的表单验证存在问题,我将不胜感激任何建议或可用的解决方法。

日期验证问题

我正在使用 angularjs v1.3.11,我遇到的问题实际上与引导日期选择器有关,但是对于标准输入 type="date" 字段来说也是同样的问题。

如果我设置了无效的闰日,例如29/02/2013(en-GB 日期 - DD/MM/YYYY)使用引导日期选择器或输入 type="date" 字段 $valid 在该表单字段上报告为无效的文本字段所有浏览器都接受 Firefox。我真的希望它在每个浏览器上都报告为无效!

它似乎使日期无效,例如,如果我将完整的垃圾放入字段中,例如输入没有月份的日期,那么 29/2013 会在所有浏览器中正确地报告为无效我'已经测试过了。就好像 Angular 正在为 Firefox 运行一个特殊的正则表达式,它不关心日期的有效性,除了它有 3 组数字。

在 Angular 网站上查看此日期问题

如果您选择以下链接https://code.angularjs.org/1.3.11/docs/api/ng/input/input%5Bdate%5D,您将被带到 angulars 自己的 input[date] 中。

点击 firefox 中的链接 - 滚动到页面底部到他们在屏幕上显示的示例并输入无效日期,例如 2013 年 2 月 29 日(似乎需要 ISO此站点上 Firefox 的日期格式),您会看到它报告您输入的日期为有效,即使 2013 年 2 月 29 日不是闰年。

例如,如果您在 chrome 中执行相同的测试,那么您会看到它报告日期为 INVALID - 这是我希望发生的事情。

如何解决这个问题? 谢谢你,如果你能读到这里!我意识到这可能是特定浏览器如何处理日期的问题,尽管我已经进行了广泛的搜索,并且在 firefox 或 angular 中都没有发现任何列出的错误。

我在这里真正希望的是,有人可能知道一种解决方法,例如一种拦截在输入字段上确定 $valid 的调用的方法,以便我可以运行自己的正则表达式或类似的东西.如果有人知道为什么这在 Firefox 中如此奇怪,我也很想知道!

提前感谢任何人可以提供的任何帮助:)

林赛

【问题讨论】:

    标签: javascript angularjs validation date firefox


    【解决方案1】:

    您需要更复杂的日期逻辑来确定日期是否有效。我建议使用诸如 moment.js 或 date.js 之类的第三方库来执行日期验证逻辑。

    尝试以下 SO 问题已接受答案底部的演示链接:

    Simple angularjs date input

    输入2013-02-29,会正确识别日期无效。

    在 Firefox、IE 和 Chrome 上测试。

    【讨论】:

    • 非常感谢,您的解决方案很有意义。我似乎使用了错误版本的 Moment,因为它接受了非常随机的事物作为日期,例如单个数字,但这是另一个问题,显然是较旧版本的时刻!我不确定我是如何设法下载这么旧的版本的,但我会解决这个问题,我相信一切都会好起来的 :)
    猜你喜欢
    • 2010-11-16
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多