React: 错误:类型更改后输入 minLength 不起作用

创建于 2020-11-05  ·  3评论  ·  资料来源: facebook/react

我有一个输入类型为 minLength 8 的密码,我有一个切换来将类型更改为文本(密码切换)。
当我输入长度 < 8 并按提交时,它会阻止提交。 但是,当我切换密码以便将类型更改为文本并提交表单时,它可以提交。 顺便说一句,我使用 useRef()

反应版本:
反应:^17.0.1
反应域:^17.0.1

重现步骤

  1. 输入字符 < minLength
  2. 提交表格
  3. 切换表单类型
  4. 提交表格

代码示例链接: DEMO

目前的行为

即使在 minLength 下,表单也会被提交

预期行为

表单在 minLength 以下时未提交

Safari DOM Bug

最有用的评论

谢谢,我可以重现这个。

通常,如果输入是原始的,则任何验证都会被忽略。 如果您提交表单而不输入任何内容, minLength被忽略。

如果您输入的内容未通过所有约束,Safari 会将表单正确标记为无效。 但是,当type更改时,Safari 似乎认为输入是原始的。 因此,如果键入完成后type发生更改,则提交无效值。

问题是 React 是否可以或应该解决这个问题,或者 Safari 是否应该解决这个问题。

编辑:
没有任何反应的最小重现: https ://codesandbox.io/s/condescending-bhabha-n4374?file

如果您需要这种行为,我建议向 Safari 提交错误。

所有3条评论

谢谢你的报告。

我可以发现两个问题:

  1. 您的演示使用minLength="3"而不是 8。
    只要您输入 2 个以上的字符,输入少于 8 个字符就可以了
  2. IE 11 不支持minLengthhttps :
    我在 Chrome 85 中测试了您的演示,输入少于 2 个字符时无法提交。
    您在测试代码时使用的是什么浏览器?

我使用的是 mac os 10.14.6 和浏览器 Safari 13.0.5 (14608.5.12)
我忘了一些东西,切换后不要输入任何字符

顺便说一句,当我尝试使用 Chrome 86.0.4240.183 时它工作正常。 我认为它只发生在野生动物园

重现步骤 1

  1. 输入字符 < minLength
  2. 提交表格
  3. 切换表单类型
  4. 切换后不要输入任何内容
  5. 提交表格
  6. 表单将提交

重现步骤 2

  1. 输入字符 < minLength
  2. 提交表格
  3. 切换表单类型
  4. 切换后输入任何内容
  5. 提交表格
  6. 表格不会提交

谢谢,我可以重现这个。

通常,如果输入是原始的,则任何验证都会被忽略。 如果您提交表单而不输入任何内容, minLength被忽略。

如果您输入的内容未通过所有约束,Safari 会将表单正确标记为无效。 但是,当type更改时,Safari 似乎认为输入是原始的。 因此,如果键入完成后type发生更改,则提交无效值。

问题是 React 是否可以或应该解决这个问题,或者 Safari 是否应该解决这个问题。

编辑:
没有任何反应的最小重现: https ://codesandbox.io/s/condescending-bhabha-n4374?file

如果您需要这种行为,我建议向 Safari 提交错误。

此页面是否有帮助?
0 / 5 - 0 等级