انتقل إلى محتوى الدرس
الدرس 66
دورة جافا سكريبت

أحداث لوحة المفاتيح في JavaScriptJavaScript Keyboard Events

أتقن أحداث لوحة المفاتيح في JavaScript عبر keydown وkeyup، وميّز بدقة بين event.key المنطقية وevent.code الفيزيائية، وبرمج الاختصارات بعيداً عن keyCode القديمة.
أقسام الدرس
5
الأمثلة
2
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
6
محتوى الدرس
في هذا الدرس 5تصفّح المواضيع

تقوم معالجة لوحة المفاتيح الحديثة في JavaScript على حدثين قياسيين شاملين: ينطلق keydown فور ضغط أي مفتاح لأسفل (سواء كان حرفاً أو سهماً أو مفتاح تحكم مثل Escape)، وينطلق keyup لحظة رفع الإصبع عن المفتاح.

وإذا أبقى المستخدم إصبعه ضاغطاً على المفتاح، يتكرر انطلاق keydown تلقائياً حاملاً القيمة المنطقية e.repeat === true في كل نبضة تكرار حتى يُختتم بحدث keyup واحد.

مخطط دورة أحداث لوحة المفاتيح والمقارنة بين المعنى النصي event.key والموقع الفيزيائي event.code

تُعد الخاصية النصية e.key الأداة الأساسية الأوضح في معظم التطبيقات؛ فمع مفاتيح الكتابة تُرجع المحرف الفعلي الناتج مع مراعاة لغة لوحة المفاتيح الحالية وحالة مفتاح Shift (مثل "a" أو "A" أو الحرف العربي المقابل).

ومع مفاتيح الأوامر والتنقل غير المطبوعة تُرجع e.key أسماء قياسية مقروءة وواضحة تماماً مثل "Enter" و"Escape" و"Backspace" و"ArrowDown".

JavaScript
const field = document.getElementById('key-input');
const out = document.getElementById('key-display');
field.addEventListener('keydown', function (e) {
  out.textContent =
    'key=' + e.key + ' | code=' + e.code + ' | rep=' + e.repeat;
});

بينما تعبر e.key عن الحرف المنطقي المدخل، تحدد e.code الموقع المادي الفيزيائي للزر على لوحة المفاتيح بغض النظر عن لغة الكتابة النشطة حالياً؛ مما يجعلها منقذة لبرامج المحاكاة والتحكم المكاني حتى لو كانت لوحة المستخدم مضبوطة على العربية:

الخاصيةضغط زر A باللغة الإنجليزيةضغط نفس الزر باللغة العربيةالاستخدام الأنسب هندسياً
e.key"a" (أو "A" مع Shift)الحرف العربي المقابل للمفتاحأوامر النصوص ومفتاحي Enter وEscape
e.code"KeyA""KeyA" ثابتة دائماًالتحكم المكاني مثل WASD وتمييز ShiftLeft عن ShiftRight

يوفر كائن KeyboardEvent الخصائص المنطقية الأربع e.ctrlKey وe.metaKey وe.altKey وe.shiftKey. ويضمن الجمع الشرطي (e.ctrlKey || e.metaKey) عمل الاختصار بسلاسة لمستخدمي Windows عبر Ctrl ومستخدمي macOS عبر مفتاح Command.

احذر من مصادرة اختصارات المتصفح الأساسية مثل Tab للتنقل، وتجنب تفعيل اختصارات الحرف الواحد أثناء كتابة المستخدم الفعلية داخل حقول النصوص.

JavaScript
const box = document.getElementById('cmd-input');
const status = document.getElementById('cmd-status');

box.addEventListener('keydown', function (e) {
  if (e.key === 'Enter' && !e.repeat) {
    status.textContent = 'Submitted query: ' + box.value;
  } else if (e.key === 'Escape') {
    box.value = '';
    status.textContent = 'Cleared via Escape.';
  }
});

اعتمدت الشروحات القديمة قديماً على الحدث keypress وفحص أرقام سحرية مبهمة مثل e.keyCode === 13 أو e.which === 27. وقد أُهملت رسمياً في المعايير الحديثة كل من keypress والخصائص الرقمية keyCode وwhich بسبب تضارب أرقامها بين المتصفحات وأنظمة التشغيل ولوحات المفاتيح العالمية.

يعتمد الكود القياسي الحديث حصراً على keydown وkeyup مع e.key وe.code الواضحتين، ويستخدم حدث input لمتابعة تغير النصوص شاملاً اللصق والإملاء الصوتي.

خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس دورة keydown وkeyup وخاصية e.repeat، وقراءة القيمة المنطقية عبر e.key والموقع الفيزيائي عبر e.code، وبناء الاختصارات المتوافقة مع المنصات، واستبدال keypress وkeyCode المهملة. الخطوة التالية: انتقل الآن إلى درس «أحداث النماذج والحقول» لإتقان أحداث input وchange وsubmit.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 event.key قيمة المفتاح المنطقية event.key
ترجع الحرف الفعلي المدخل حسب لغة اللوحة وحالة Shift أو الاسم القياسي الواضح مثل Enter وEscape.
للمراجعة
02 event.code رمز الموقع الفيزيائي event.code
تحدد الموقع المادي الثابت للزر على لوحة المفاتيح مثل KeyA بغض النظر عن لغة الكتابة النشطة.
للمراجعة
03 event.repeat خاصية التكرار التلقائي event.repeat
خاصية منطقية تكون false عند أول ضغطة ثم تصبح true عند استمرار الضغط المتكرر على المفتاح.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 QWERTY QWERTY
Standard Reference Keyboard Layout
التخطيط المرجعي القياسي للوحة المفاتيح الذي تُشتق منه أسماء المواقع الفيزيائية في event.code.
للمراجعة
02 IME IME
Input Method Editor
محرر طرق الإدخال المركبة في نظام التشغيل الذي ترصده خاصية event.isComposing.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. ضع المؤشر داخل حقل الفحص واضغط حروفاً عادية ومع Shift ومسطرة المسافة والأسهم لملاحظة الفرق بين key وcode.

  2. اكتب عبارة في حقل البحث داخل المحرر ثم اضغط Enter لاعتمادها واضغط Escape لتفريغ الحقل فوراً.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

أي خاصية حديثة في كائن KeyboardEvent ترجع نصوصاً واضحة مثل "Enter" و"Escape" أو الحرف المكتوب؟

02

إذا حوّل المستخدم لغة لوحة المفاتيح إلى العربية وضغط الزر الفيزيائي لموضع W، فأي خاصية تظل قيمتها "KeyW"؟

03

عند إبقاء الإصبع ضاغطاً باستمرار على مفتاح، يتكرر انطلاق الحدث keydown وتكون خاصية e.repeat مساوية لـ true.

04

لماذا يُتجنب الحدث keypress والخصائص الرقمية e.keyCode وe.which في كود JavaScript الحديث؟

05

كيف تبرمج اختصار الحفظ ليعمل عبر Ctrl+S في Windows وCommand+S في macOS معاً؟

06

ما القيمتان اللتان ترجعهما e.key وe.code عند ضغط مسطرة المسافة؟

07

الاعتماد على keydown وحده يكفي لرصد جميع طرق إدخال النص في الحقل بما فيها اللصق بالفأرة والملء التلقائي.

08

أي خاصية تميز بدقة ما إذا كان المستخدم قد ضغط مفتاح Shift الأيسر ("ShiftLeft") أم الأيمن ("ShiftRight")؟

09

ما الحدث الذي ينطلق فور رفع المستخدم إصبعه عن المفتاح المضغوط؟

10

يجب على اختصارات الصفحة المخصصة تجنب تعطيل مفاتيح التنقل الأساسية للمتصفح مثل مفتاح Tab.