Safari 不承认“必需”属性。如何解决?

Posted

技术标签:

【中文标题】Safari 不承认“必需”属性。如何解决?【英文标题】:Safari is not acknowledging the "required" attribute. How to fix it? 【发布时间】:2015-12-17 12:42:39 【问题描述】:
<form id="customerForm">
    <label>
        First Name:
        <input id="firstName" required />
    </label>
    <label>
        Social Security Number:
        <input id="ssn" required pattern="^d3-d2-d4$"
            title="Expected pattern is ###-##-####" />
    </label>
    <input type="submit" />
</form>

当我在 Chrome 中尝试该文档时,它会接受条件并按预期显示错误。

但是当我在 Safari 中尝试该文档时,它没有显示错误。

【问题讨论】:

【参考方案1】:

目前,Safari 不支持“必需”输入属性。 http://caniuse.com/#search=required

要在 Safari 上使用 'required' 属性,您可以使用 'webshim'

1 - 下载 webshim

2 - 输入此代码:

<head>
    <script src="js/jquery.js"></script>

    <script src="js-webshim/minified/polyfiller.js"></script> 

    <script> 
        webshim.activeLang('en');
        webshims.polyfill('forms');
        webshims.cfg.no$Switch = true;
    </script>
</head>

【讨论】:

谢谢!我决定改用 CDN 中的它,你可以在这里找到一个缩小版:cdnjs.com/libraries/webshim 谢谢,我完全忘记了 Webshim,它立即解决了问题。遗憾地发现两个重复的问题,原则上答案很好,但与您的解决方案不接近;现在标记他们,并希望能引导更多的人看到这个帖子/答案! 我在自己的回答中提到了您的答案(甚至将您的代码示例复制为其他人的“kickstart”),我刚刚被问到“webshims.cfg.no$Switch”这一行是什么=真;'确实如此。你能给我解释一下吗? :) webshim.activeLang('en'); @detoro84 设置您要使用的语言,如下所述:afarkas.github.io/webshim/demos/demos/…【参考方案2】:

目前,Safari 不会针对用户未提供的表单字段中的必需值(也不会针对用户在表单字段中输入的无效值)发出任何错误消息。但是您可以通过使用 hacks 或 polyfill 来启用它。请参阅 html5 Form Validation Fallback (without a library) 了解启用它的轻量级 hack,并参阅 h5Validate 了解基于 jQuery 的 polyfill 插件。

【讨论】:

Webshim 是一个不错的库,但如果您的目标是解决 OP,那么链接的“HTML5 表单验证后备”在大约 20 行代码中是完美的。【参考方案3】:

Safari 10.1 and newer 中应提供所需的属性。

【讨论】:

以上是关于Safari 不承认“必需”属性。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 表单中删除必需的属性

如何解决警告:阵营不承认一个DOM元素的X道具

如何复制 Safari 的“模式”属性?

在 Django 的身份验证用户模型中,将名字、姓氏作为必需属性而不是可选属性

如何向动态创建的 (C#) 元素添加“必需”属性?

如何在 Spring-MVC 中添加“必需”属性 [重复]