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

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

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

【问题讨论】:

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

标签: ios iphone html input safari


【解决方案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 错误团队。
      • 另外,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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-02
          • 2012-09-05
          • 1970-01-01
          • 1970-01-01
          • 2018-08-06
          • 2017-04-12
          • 2016-11-01
          相关资源
          最近更新 更多