Mobile Safari (10.3.1) DateTime-Local“输入有效值”错误

Posted

技术标签:

【中文标题】Mobile Safari (10.3.1) DateTime-Local“输入有效值”错误【英文标题】:Mobile Safari (10.3.1) DateTime-Local "Enter a Valid Value" Error 【发布时间】:2017-05-02 21:27:27 【问题描述】:

我在使用较新版本的 ios 移动 Safari 时遇到错误。在 iOS 版本 10.3 之前不会发生此错误。有人可以指出我正确的方向吗?

这里是原始 html,并附上检查的视图和移动设备 (iPhone 7) 的视图。

【问题讨论】:

Apple 认为不同... 3 年前的错误仍未修复 我自己也偶然发现了同样的情况。 Safari 是否有替代本地日期时间的可行方法? @SnorreHukkelås 我没有找到。我确实在很多很多年前提交了这个错误。仍然没有解决办法。 【参考方案1】:

简单的解决方案!

IOS 要求在类型为“本地日期时间”的输入字段上设置一个值。

示例:<input type="datetime-local" value="2000-07-01T12:00" />

就是这样:)

我个人觉得将默认值设置为用户当前的本地时间很好。这必须在没有秒的情况下以 ISOTime 格式化,因此代码可能类似于:

// get the iso time string formatted for usage in an input['type="datetime-local"']
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1);
var localISOTimeWithoutSeconds = localISOTime.slice(0,16);

// select the "datetime-local" input to set the default value on
var dtlInput = document.querySelector('input[type="datetime-local"]');

// set it and forget it ;)
dtlInput.value = localISOTime.slice(0,16);

【讨论】:

除非这不适用于我的用例,我想确保用户实际检查并验证了这些字段是否正确。为我预先填充这些字段是完全不合适的。 (标记为正确,因为我现在可以提交表单了。虽然我讨厌苹果要求这样做,但这不是你的错。谢谢你的帮助。) 不工作。我什至将 value 属性和 .value 都设置为这种格式的日期,但仍然没有骰子!啊!如果我找到解决方案,我会更新。【参考方案2】:

此消息由客户端验证触发。如果您没有使用客户端验证,那么我发现您可以通过使用 novalidate 属性将其关闭来解决此问题,如下所示:

<form action="/myaction" method="POST" novalidate>

【讨论】:

【参考方案3】:

对于那些和我一样还在与 IOS datetime-local 斗争的人。

这是由于 IOS 在 value 属性/属性未设置或设置无效时将 datetime-local value 设置为无效格式。

<input type='datetime-local' onChange='alert(event.target.value)'>

这将以 'yyyy-MM-ddThh:mm:ss' 格式发出警报,例如 2018-12-25T12:00:00 包含不允许的秒字符串。

要绕过它,只需使用有效形式设置值。

const onChange = (event) => 
    event.target.value = event.target.value.substr(0, 16);

就是这样。

【讨论】:

【参考方案4】:

好像是 Safari 的一个 bug,不过你可以通过 javascript 提交表单来跳过它。

$("#new_apply_form").submit();

【讨论】:

感谢上帝,不只是我!我会将其提交给 Safari 错误团队。 在这里提交了错误仅供参考。 Mobile Safari (10.3.1) DateTime-Local “Enter a Valid Value” Error 另外,sn-p 只是一遍又一遍地重新加载页面。它需要等待提交按钮上的 onClick 事件,否则它只会不断地重新加载页面。 即使是这种形式... $( "#hours" ).submit(function( event ) return true; ); 它仍然要求一个有效的日期。 :// 仅供参考,我们看不到该错误,因为它对您的 Apple ID 是私有的。考虑重新发布到 Open Radar:openradar.me【参考方案5】:

这是 Safari 中的一个错误。您应该使用 JS 来提交表单。

JS:form.submit();

【讨论】:

这对我也不起作用,将以下内容添加到提交按钮。 onClick="form.submit()" 所做的只是重新加载页面,没有提交任何信息。【参考方案6】:

format('Y-m-d\TH:i') 为我工作。

【讨论】:

【参考方案7】:

这已在 iOS 15.4 中修复。在 iOS 15.3.1 上,一旦用户点击输入,它就会自动填充当前日期/时间,并且值将如下所示:

2022-03-18T13:30:45.123

因此,除非用户将日期和/或时间更改为其他内容,否则提交表单将导致客户端验证错误。

但在 iOS 15.4 上,一旦用户点击输入,它仍会自动填充当前日期/时间,但现在该值将如下所示:

2022-03-18T13:30

【讨论】:

以上是关于Mobile Safari (10.3.1) DateTime-Local“输入有效值”错误的主要内容,如果未能解决你的问题,请参考以下文章

Safari 和 Mobile Safari 需要刷新页面才能播放 Howler Audio

Safari 和 Mobile Safari 中的内联 SVG 中断

mobile-safari javascript:多个 setTimeouts 或 setIntervals

CSS 仅限iPhone(Mobile Safari)

在 jQuery Mobile / Mobile Safari 中按下提交后不要隐藏键盘

jQuery Mobile 自定义选择菜单适用于 Mobile Safari,但不适用于 UIWebView