minLength 8 のパスワード タイプの入力があり、タイプをテキストに変更するトグルがあります (パスワード トグル)。
長さ < 8 で入力して送信を押すと、送信できません。 ただし、パスワードを切り替えてタイプをテキストに変更してフォームを送信すると、送信できます。 ところで、useRef() を使用して
リアクトのバージョン:
反応: ^17.0.1
反応ドーム: ^17.0.1
コード例へのリンク: DEMO
minLength 未満でもフォームが送信される
minLength 未満の場合、フォームが送信されない
ご報告ありがとうございます。
私は 2 つの問題を特定できます。
minLength="3"
います。minLength
は IE 11 ではサポートされていません: https://caniuse.com/input-minlengthmac os 10.14.6 とブラウザ Safari 13.0.5 (14608.5.12) を使用しています
何か忘れた、切り替えた後は何も入力しないでください
ところで、Chrome 86.0.4240.183 で試してみると、正常に動作します。 サファリでしか起こらないと思う
ありがとう、私はこれを再現できます。
通常、入力が元の状態の場合、検証は無視されます。 何も入力せずにフォームを送信すると、 minLength
は無視されます。
すべての制約を満たさない何かを入力した場合、Safari はフォームを正しく無効としてマークします。 ただし、 type
が変更されると、Safari は入力を元の状態であると見なすようです。 したがって、入力が完了した後にtype
変更された場合、無効な値が送信されます。
問題は、React がこの癖を修正できるか、修正すべきか、あるいは Safari がこれを修正すべきかどうかです。
編集:
反応のない最小限の再現: https://codesandbox.io/s/condescending-bhabha-n4374?file=/src/index.js
この動作が必要な場合は、Safari でバグを報告することをお勧めします。
最も参考になるコメント
ありがとう、私はこれを再現できます。
通常、入力が元の状態の場合、検証は無視されます。 何も入力せずにフォームを送信すると、
minLength
は無視されます。すべての制約を満たさない何かを入力した場合、Safari はフォームを正しく無効としてマークします。 ただし、
type
が変更されると、Safari は入力を元の状態であると見なすようです。 したがって、入力が完了した後にtype
変更された場合、無効な値が送信されます。問題は、React がこの癖を修正できるか、修正すべきか、あるいは Safari がこれを修正すべきかどうかです。
編集:
反応のない最小限の再現: https://codesandbox.io/s/condescending-bhabha-n4374?file=/src/index.js
この動作が必要な場合は、Safari でバグを報告することをお勧めします。