حسنًا، لقد بحثت في هذا الأمر مرة أخرى اليوم وتمكنت من إعادة إنتاجه بعد تبديل لوحة المفاتيح الافتراضية على هاتفي إلى Gboard. تقوم Gboard أحيانًا بتشغيل أحداث keydown و keyup مرتين لضغطة مفتاح واحدة، وإذا حدث ذلك لآخر مفتاح تضغطه قبل تحديد رمز تعبيري من الإكمال التلقائي، فستحصل على تعطل.
لست متأكدًا مما يتسبب في تشغيل Gboard لهذه الأحداث مرتين، ولكنه يبدو أنه يعتمد على ما كتبته وإعدادات Gboard الخاصة بك.
تتسبب الأحداث المزدوجة في تعطل بسبب الطريقة التي تم بها تصميم مكتبة الإكمال التلقائي لدينا. لذا تستمع المكتبة إلى أحداث keydown و keyup، وفي keydown تقوم بمسح اقتراحات الإكمال التلقائي وفي keyup تقدم اقتراحات جديدة بناءً على مصطلح الإكمال التلقائي الجديد.
ومع ذلك، هناك حارس/تحسين صغير لحماية المكتبة من القيام بعمل مكرر عندما لم يتغير المصطلح منذ الاقتراحات السابقة، وهنا تحدث المشكلة. تقوم المجموعة الأولى من أحداث keydown و keyup بمسح الاقتراحات القديمة وتقديم اقتراحات جديدة كما هو متوقع، ولكن المجموعة الثانية الخاطئة ستقوم بمسح الاقتراحات مرة أخرى في keydown ولكنها لن تقدم اقتراحات جديدة في keyup لأن مصطلح الإكمال التلقائي لم يتغير.
الحل “الأقل خداعًا” الوحيد الذي يمكنني التفكير فيه هو إزالة الحارس/التحسين حتى تقدم المكتبة دائمًا اقتراحات جديدة في keyup، ولكني لست متأكدًا مما إذا كان هذا مرغوبًا فيه أو يستحق العناء.
أعلم أننا نريد إعادة كتابة مكتبة الإكمال التلقائي الخاصة بنا في وقت ما (إنها من أقدم الأكواد في قاعدة الأكواد وتحتاج بشدة إلى إعادة كتابة)، لذا ربما يمكن أن تنتظر هذه المشكلة حتى نصل إلى إعادة الكتابة؟