FreeToGenerate.com

اضغط 1 ثم Shift مع 1. يبقى code هو Digit1، ويصير key هو «!»، ويبقى keyCode هو 49 — ولهذا لا يستطيع keyCode التمييزَ بينهما.

اضغط أيَّ مفتاح

انقر هنا ثم اضغط مفتاحًا. جرّب 1 ثم Shift مع 1 معًا، وانظر أيَّ الحقول يتغيّر وأيَّها لا يتغيّر.

انقر لبدء الاستماع.

معطَّلٌ افتراضيًّا، لأنّ Tab هو سبيلُ الخروج من هذا المربّع بلوحة المفاتيح.

المفاتيح الأخيرة

لم تضغط شيئًا بعد.

ثابتة
18
ثابتةٌ اختياريًّا
22
رموزٌ مكرَّرة
11
40 / 40

جدولا المعيار نفسِه

8Backspaceثابت
9Tabثابت
13Enterثابت
16Shiftثابت
17Controlثابت
18Altثابت
20CapsLockثابت
27Escapeثابت
32Spaceثابت
33PageUpثابت
34PageDownثابت
35Endثابت
36Homeثابت
37ArrowLeftثابت
38ArrowUpثابت
39ArrowRightثابت
40ArrowDownثابت
46Deleteثابت
186Semicolonثابتٌ اختياريًّا= Semicolon / Colon
186Colonثابتٌ اختياريًّا= Semicolon / Colon
187Equals signثابتٌ اختياريًّا= Equals sign / Plus
187Plusثابتٌ اختياريًّا= Equals sign / Plus
188Commaثابتٌ اختياريًّا= Comma / Less than sign
188Less than signثابتٌ اختياريًّا= Comma / Less than sign
189Minusثابتٌ اختياريًّا= Minus / Underscore
189Underscoreثابتٌ اختياريًّا= Minus / Underscore
190Periodثابتٌ اختياريًّا= Period / Greater than sign
190Greater than signثابتٌ اختياريًّا= Period / Greater than sign
191Forward slashثابتٌ اختياريًّا= Forward slash / Question mark
191Question markثابتٌ اختياريًّا= Forward slash / Question mark
192Backtickثابتٌ اختياريًّا= Backtick / Tilde
192Tildeثابتٌ اختياريًّا= Backtick / Tilde
219Opening squace bracketثابتٌ اختياريًّا= Opening squace bracket / Opening curly brace
219Opening curly braceثابتٌ اختياريًّا= Opening squace bracket / Opening curly brace
220Backslashثابتٌ اختياريًّا= Backslash / Pipe
220Pipeثابتٌ اختياريًّا= Backslash / Pipe
221Closing square bracketثابتٌ اختياريًّا= Closing square bracket / Closing curly brace
221Closing curly braceثابتٌ اختياريًّا= Closing square bracket / Closing curly brace
222Single quoteثابتٌ اختياريًّا= Single quote / Double quote
222Double quoteثابتٌ اختياريًّا= Single quote / Double quote

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

فاحص رموز المفاتيح في جافاسكربت

يعرض كلَّ حقلٍ يحمله حدثُ keydown، ويبيّن أيَّها يحدّده المعيارُ فعلًا.

ما فاحصُ رموز المفاتيح؟

حين تضغط مفتاحًا يُطلق المتصفحُ حدثَ keydown يحمل خصائصَ عدّة تصف الضغطةَ نفسَها بطرقٍ مختلفة. والفاحصُ يريك ما تحتويه تلك الخصائصُ فعلًا، وهو أسرعُ سبيلٍ لتعرف ما الذي تفحصه في شفرتك، والسبيلُ الوحيدُ لتتيقّن: فالجوابُ يتوقّف على المتصفح ونظام التشغيل وتخطيط لوحة المفاتيح الذي أمامك.

والثلاثةُ التي تهمّ هي key وcode وkeyCode. فـcode يسمّي المفتاحَ الماديَّ بموضعه من لوحةٍ أمريكيةٍ افتراضية: فالمفتاحُ المجاور لـShift الأيسر هو KeyZ سواءٌ كان الحرفُ المطبوع عليه Z أو Y أو W. وkey هو ما أنتجته تلك الضغطة: الحرفُ نفسُه، أو اسمٌ مثل ArrowLeft أو Escape حين لا يكون ثمّة حرف. أما keyCode فرقمٌ موروثٌ عن تصميمٍ أقدمَ بكثير ما زالت المتصفحاتُ ترسله.

والبرهانُ في الأعلى ويكفيه يدٌ واحدة. اضغط مفتاح 1: يكون key هو «1»، وcode هو Digit1، وkeyCode هو 49. ثم أمسك Shift واضغطه ثانية: يبقى code هو Digit1، ويبقى keyCode هو 49، ويصير key هو «!». حرفان مختلفان، ومفتاحٌ ماديٌّ واحد، ورقمٌ عاجزٌ عن التمييز بينهما.

كيف تستعمله

  1. انقر المربّع ثم اضغط مفتاحًا. لا يستمع المربّعُ إلا وهو في البؤرة، فلا يُلتقط شيءٌ من ورائك. تظهر حقولُ الحدث كلُّها في الحال، وتُحفظ تحتها آخرُ ثماني ضغطاتٍ لتقارن اثنتين جنبًا إلى جنب.
  2. جرّب زوجًا لا يختلف إلا بمعدِّل. ‏1 وShift+1، أو مفتاح الفاصلة المنقوطة مع Shift وبدونه. راقب key وهو يتغيّر بينما يثبت code وkeyCode: هذا هو الفرقُ كلُّه، ظاهرًا على لوحةٍ واحدة.
  3. ابحث عن رمزٍ في الجدولين أدناه. الجدولان هما جدولا المعيار نفسِه. ابحث بالاسم أو بالرقم؛ والرموزُ التي يوردها المعيارُ تحت حرفين مختلفين مُعلَّمة، لأنها بعينها ما لا يستطيع keyCode حسمَه.

‏keyCode لم يكن معيارًا قطُّ، والمعيارُ يقول ذلك

يقال عادةً إنّ keyCode مهجور. وليس هذا تمامًا ما جرى، وما جرى أطرف. فالقسمُ السابعُ من مواصفة UI Events، حيث تُوصف هذه الخصائص، موسومٌ بأنه غيرُ مُلزِم، ويقول عنها إنها «لم تُحدَّد رسميًّا قطُّ، وتنفيذاتُ المتصفحات الحالية تتفاوت تفاوتًا كبيرًا». والمواصفةُ «لا تعرّف أيًّا منها تعريفًا مُلزِمًا». وهي مكتوبةٌ فقط ليُسجَّل في مكانٍ ما ما تفعله المتصفحاتُ أصلًا.

والسببُ المذكورُ أنّ الوقت قد فات على الإصلاح. فتقييسُ الخصائص الموروثة «قد يكسر من المحتوى قدرَ ما يصلح أو يتيح»، لكثرة الشِّفرة التي تتحرّى المتصفحَ وتتصرّف بحسبه. وتضيف المواصفةُ أنّ هذه الخصائص «غيرُ صالحةٍ للاستعمال الدولي، ولا تعالج شواغلَ الوصولية»، وأنّ على المؤلفين استعمالَ key بدلًا منها.

ثم تفعل شيئًا غيرَ معتاد: تنشر جدولين يصفان ما تتفق عليه المتصفحات، وتفصل بينهما بقدر ما هي مستعدّةٌ لتأكيده. أحدُهما يورد الرموزَ التي «لا تتغيّر عادةً بتغيّر تخطيط لوحة المفاتيح على أنظمة سطح المكتب» — ولاحظ «عادةً»، وهي كلمةُ المعيار نفسِه. والآخرُ يورد علاماتِ ترقيمٍ «قد تتغيّر رموزُها بين التخطيطات»، حيث تعطي المتصفحاتُ رقمَ اللوحة الأمريكية لأنّ الشِّفرة القديمة تتوقّعه.

والجدولُ الثاني يحمل أقوى دليلٍ في هذه الصفحة، ولا يحتاج ضغطَ مفتاحٍ البتّة. فأحدَ عشرَ من رموزه مذكورةٌ مرّتين: مرّةً للحرف بلا Shift ومرّةً للحرف معه. فـ186 هي الفاصلةُ المنقوطة والنقطتان معًا، و187 هي علامةُ يساوي وعلامةُ زائد معًا، و222 هي علامةُ التنصيص المفردة والمزدوجة معًا. وهذا الالتباسُ ليس خللًا في متصفحٍ ولا حالةً نادرة، بل هو مطبوعٌ في المعيار.

حدودٌ صريحة

لا تستطيع هذه الصفحةُ أن تخبرك إلا بما يرسله متصفحُك، على نظامك، بتخطيط لوحتك الحاليّ، في هذه اللحظة. وهذا نافعٌ حقًّا — فهو الجهازُ الذي تنقّح عليه — لكنه ليس جوابًا عامًّا. فإن أردت أن تعرف ما ترسله لوحةُ AZERTY الفرنسية لمفتاحٍ ماديٍّ بعينه فلا فاحصَ يعمل على جهازك يخبرك به: فقيمةُ code معرَّفةٌ على تخطيطٍ أمريكيٍّ افتراضيٍّ تحديدًا كي لا تتغيّر، وكلُّ ما عداها يتغيّر.

ولا يستمع المربّعُ إلا وهو في البؤرة، وهذا مقصودٌ لا قصور. فصفحةٌ تلتقط كلَّ ضغطةٍ مهما كان أمرٌ مزعج، وهي تكسر اختصاراتِ المتصفح نفسِه. وللسبب ذاته لا يُلتقط Tab إلا بطلبك: فالضغطُ عليه هو سبيلُ الخروج من المربّع بلوحة المفاتيح، وحبسُه صامتًا يترك أحدهم محصورًا.

وثمّة مفاتيحُ لا تستطيع صفحةُ وِبٍّ التقاطَها البتّة، مهما فعلت. فالمتصفحُ ونظامُ التشغيل يأخذان طبقةً قبلها، فالتركيبةُ المسنَدةُ إلى إغلاق نافذةٍ أو تبديل تطبيقٍ أو فتح قائمةِ نظامٍ لا تبلغ الصفحةَ أبدًا. وليس هذا مما يستطيع فاحصٌ الالتفافَ عليه، وكلُّ صفحةٍ تدّعي غيرَ ذلك تفحص شيئًا آخر.

والمفاتيحُ الميّتة جديرةٌ بالمعرفة إن كنت تكتب لغةً بعلامات. ففي تخطيطاتٍ كثيرةٍ لا ينتج مفتاحُ العلامة حرفًا بذاته — بل يعدّل التاليَ — فيبلّغ المتصفحُ key بأنه «Dead». والفاحصُ يسمّيها بدل عرض قيمةٍ فارغة، لأنّ حقلَ key الفارغ يبدو خللًا وهو الجوابُ الصحيح.

وأخيرًا، الجدولان هنا جدولا المعيار، لا إحصاءٌ لكلّ ما قد يرسله متصفح. فأكثرُ الرموز لا يرد في أيٍّ منهما، والصفحةُ تقول ذلك بدل أن تختلق حالة: فالمعيارُ يصف القيمَ التي رأى المتصفحات تتفق عليها فحسب.

لماذا هو مجاني؟

لأن تشغيله لا يكلّف شيئًا. فكلُّ شيءٍ يجري في متصفحك: تُقرأ الضغطاتُ وتُعرض محليًّا، ولا يُرسل شيءٌ إلى أيّ مكان، ولا حسابَ هناك.

والجدولان مستخرَجان من المواصفة ببرنامجٍ محفوظٍ في المستودع، والاختباراتُ تعيد استخراجهما وتقارن، فانحرافُ ما تعرضه هذه الصفحةُ عمّا يطبعه المعيارُ يكسر البناءَ بدل أن يبلغك. وقد أُبقي على الخطأ المطبعيّ الذي في المعيار نفسِه في اسم أحد المفاتيح عمدًا، دليلًا على أنّ الجدول قُرئ ولم يُنقل عن ظهر قلب.