React: خطأ: إدخال minLength لا يعمل بعد تغيير النوع

تم إنشاؤها على ٥ نوفمبر ٢٠٢٠  ·  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 إصلاح ذلك.

يحرر:
الحد الأدنى من repro دون أي رد فعل: https://codesandbox.io/s/condescending-bhabha-n4374؟file=/src/index.js

إذا كنت بحاجة إلى هذا السلوك ، أقترح تقديم خطأ في Safari.

ال 3 كومينتر

شكرا على التقرير.

يمكنني تحديد مشكلتين:

  1. يستخدم العرض التوضيحي الخاص بك minLength="3" وليس 8.
    لا بأس بكتابة أقل من 8 أحرف طالما أنك تكتب أكثر من 2
  2. minLength غير مدعوم في IE 11: https://caniuse.com/input-minlength
    لقد اختبرت العرض التوضيحي الخاص بك في Chrome 85 ولم أتمكن من الإرسال عندما أدخلت أقل من حرفين.
    ما هو المتصفح الذي كنت تستخدمه عند اختبار الكود الخاص بك؟

أنا أستخدم نظام التشغيل 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 إصلاح ذلك.

يحرر:
الحد الأدنى من repro دون أي رد فعل: https://codesandbox.io/s/condescending-bhabha-n4374؟file=/src/index.js

إذا كنت بحاجة إلى هذا السلوك ، أقترح تقديم خطأ في Safari.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات