【发布时间】:2020-06-24 02:01:47
【问题描述】:
我的浏览器(Chrome,Mac 上)有一个这样呈现的输入元素。注意空白的pattern 属性
<input aria-labelledby="Amount Given" type="text" pattern="" inputmode="" field="[object Object]" data-qa="Amount Given" placeholder="$0.00" variant="default" metadata="[object Object]" class="sc-fznzOf dIIJtr" value="" style="text-align: right;">
如果模式属性存在但未指定或无效,则不应用正则表达式并完全忽略此属性。如果模式属性有效且非空值与模式不匹配,则约束验证将阻止表单提交。
据此,我的输入元素应该忽略pattern 属性,因为pattern 被赋予空字符串值。相反,约束验证阻止了表单提交,并且我收到有关模式不匹配的原生 html 工具提示警告。
让这更令人困惑的是,这个元素是由一个 React 组件呈现的,该组件完全正常运行,并且在我组织的其他地方使用,没有这个障碍。
其他需要注意的事项:如果我在开发工具中手动完全删除了该属性,提交不会被阻止(这意味着它肯定是这个属性在执行)。在 UI 中,如果我将字段完全留空,则不再阻止提交(这意味着我通过了模式匹配约束)。
因此,似乎实际发生的是空白pattern 属性在我的字段上强制执行“空”模式(与required 属性相反)。这与 MDN 文档或我能找到的任何其他文档中描述的不同。
但是,事实上,这个 React 组件在其他地方呈现完全相同的 HTML 而没有这个问题,我觉得 HTML 表单 DOM 约束系统的其他一些功能是强制空白模式,这在我能找到的文档。
【问题讨论】:
-
pattern(而不是pattern="")也会发生这种情况吗? -
实际上
pattern是它在开发工具中的显示方式,但是当我从那里复制它并粘贴到这里时,它就变成了这样pattern=""。我理解这两种语法来向浏览器表示相同的东西。
标签: javascript html forms validation