هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟
الإبلاغ عن خطأ. تم الإبلاغ عنها مبدئيًا في https://github.com/mozilla-services/react-jsonschema-form/issues/1153
ما هو السلوك الحالي؟
يستبدل الملء التلقائي القيم الموجودة في الحقول عندما يتم التحكم في تلك الحقول في React.
راجع https://jsfiddle.net/epicfaace/9p17e2qx/21/ - لاختبار ذلك ، أضف "عنوان محفوظ" في خيارات Chrome.
ما هو السلوك المتوقع؟
لا يستبدل الملء التلقائي الحقول الموجودة. لقد قمت بإنشاء JSFiddle باستخدام نموذج HTML عادي ، والذي يعمل مع السلوك المتوقع.
انظر https://jsfiddle.net/epicfaace/1my3f9n4/6/
ما إصدارات React وأي متصفح / نظام تشغيل متأثر بهذه المشكلة؟
رد فعل 15.3.2
كروم 71.0.3578.98
يبدو أنه ناتج عن خاصية "القيمة" (على سبيل المثال ، الذي يبدو أن الكروم يراه كقيمة افتراضية / عنصر نائب للحقل) يساوي القيمة المدرجة للحقل. لذلك عند رد الفعل على تحديث خاصية القيمة عند تغيير الحالة ، فإننا نقوم من الناحية الفنية بتغيير القيمة الافتراضية / العنصر النائب لمطابقة كل ما نكتبه. لذلك يرى الكروم هذا على أنه حقل لم يتم لمسه ، وسيتم الكتابة فوقه عند التعبئة التلقائية
فمثلا. اكتب سلسلة في حقل الاسم الأول ... سيؤدي رد فعل إلى تحديث خاصية القيمة إلى كل ما كتبته. جرب ميزة الملء التلقائي للبريد الإلكتروني وستستبدل حقل الاسم الأول.
ومع ذلك ، اكتب سلسلة في حقل الاسم الأول ، ثم افحص العنصر وحرر خاصية الاسم الأول لسلسلة أخرى غير تلك التي كتبتها ، وحاول الملء التلقائي للبريد الإلكتروني مرة أخرى ... هذه المرة لن يتم استبدالها .. . لأن القيمة ليست هي نفسها القيمة "الافتراضية".
هناك طريقة أخرى للتغلب عليها وهي onChange ، تحديث autocomplete = this.state.value. وسوف يتعرف الكروم على عدم الإكمال التلقائي لهذا الحقل لسبب ما. (الإكمال التلقائي = إيقاف التشغيل لا يعمل ... يجب أن يكون أي سلسلة عشوائية) إذا كانت فارغة وكانت قيمة this.state.value فارغة ، فسيظل الملء التلقائي يعمل في الحقل كما هو متوقع.
^ ^ هذا صحيح. إليك مثال عملي باستخدام اقتراح onChange: https://jsfiddle.net/epicfaace/9p17e2qx/29/
مثير جدا! هذا أحد الآثار الجانبية لمزامنة سمة / خاصية القيمة على المدخلات التي لم أكن على علم بها من قبل (شكرًا ، @ mabeabe28):
إذا كانت سمة القيمة مماثلة لخاصية القيمة ، يفترض Chrome أن الإدخال "لم يتم تغييره" ، وسيحل محل خاصية القيمة أثناء إجراء الملء التلقائي
أتساءل عما إذا كان هذا صحيحًا في المتصفحات الأخرى.
أشعر أنه يجب أن يكون لدينا مشكلة في تتبع الأخطاء في الملء التلقائي ، لكنني لست متأكدًا مما إذا كان أي منها يوثق ذلك. لقد صنعت أيضًا خلاصة تقارن بين النهج الأصلي ونهج React:
إذا كانت سمة القيمة مماثلة لخاصية القيمة ، يفترض Chrome أن الإدخال "لم يتم تغييره" ، وسيحل محل خاصية القيمة أثناء إجراء الملء التلقائي
قد يتم حل هذا جزئيًا على الأقل بواسطة # 13525 ("إيقاف عكس قيم الإدخال في سمة القيمة").
التعليق الأكثر فائدة
يبدو أنه ناتج عن خاصية "القيمة" (على سبيل المثال ، الذي يبدو أن الكروم يراه كقيمة افتراضية / عنصر نائب للحقل) يساوي القيمة المدرجة للحقل. لذلك عند رد الفعل على تحديث خاصية القيمة عند تغيير الحالة ، فإننا نقوم من الناحية الفنية بتغيير القيمة الافتراضية / العنصر النائب لمطابقة كل ما نكتبه. لذلك يرى الكروم هذا على أنه حقل لم يتم لمسه ، وسيتم الكتابة فوقه عند التعبئة التلقائية
فمثلا. اكتب سلسلة في حقل الاسم الأول ... سيؤدي رد فعل إلى تحديث خاصية القيمة إلى كل ما كتبته. جرب ميزة الملء التلقائي للبريد الإلكتروني وستستبدل حقل الاسم الأول.
ومع ذلك ، اكتب سلسلة في حقل الاسم الأول ، ثم افحص العنصر وحرر خاصية الاسم الأول لسلسلة أخرى غير تلك التي كتبتها ، وحاول الملء التلقائي للبريد الإلكتروني مرة أخرى ... هذه المرة لن يتم استبدالها .. . لأن القيمة ليست هي نفسها القيمة "الافتراضية".
هناك طريقة أخرى للتغلب عليها وهي onChange ، تحديث autocomplete = this.state.value. وسوف يتعرف الكروم على عدم الإكمال التلقائي لهذا الحقل لسبب ما. (الإكمال التلقائي = إيقاف التشغيل لا يعمل ... يجب أن يكون أي سلسلة عشوائية) إذا كانت فارغة وكانت قيمة this.state.value فارغة ، فسيظل الملء التلقائي يعمل في الحقل كما هو متوقع.