التعامل مع ضغط المفاتيح عبر المتصفحات للمفاتيح الخاصة (الأسهم، ...) في جافاسكريبت


أنا أبني واجهة متصفح لمحطة طرفية. أحتاج إلى التقاط كل من ضغطات المفاتيح الحرفية (حروف وأرقام، نقطة، شريط مائل، ...) وغير الحرفية (الأسهم، F1-F12، ...). أيضًا، إذا ضغط المستخدم على مفتاح واستمر في الضغط عليه، سيكون من الجيد الحصول على ضغطات مفتاح متكررة (يجب استدعاء الدالة بشكل متكرر حتى يتم تحرير المفتاح). وينطبق نفس الشيء على مفتاح المسافة والحروف، ...

أريد أن يكون هذا متوافقًا مع معظم المتصفحات قدر الإمكان (فشل حدث keypress في jQuery في هذا الصدد). لقد جربت أيضًا استخدام نسخة معدلة من jquery.hotkeys.js، لكن إذا كنت أفهم بشكل صحيح، لا يمكنني التقاط كل من المفاتيح الخاصة والمفاتيح الحرفية في دالة واحدة (ينبغي استخدام keydown للأولى و keydown للأخيرة).

هل هناك مكتبة جافاسكريبت تسمح لي بالتقاط كل من المفاتيح الحرفية والمفاتيح الخاصة؟

آمل ألا أكون قد فوت شيئًا واضحًا. :)

تحديث للتوضيح: أنا أبحث عن المكتبة التي ستخفي تفاصيل تنفيذ المتصفح عني.

الإجابة رقم 1

الـ onkeydown هو بالضبط ما تحتاجه. إنه يلتقط جميع المفاتيح، حتى إذا كنت تضغط على زر فإنه يتم تشغيله بشكل متكرر.

<input type='text' onkeydown='return myFunc(this,event)'>

<script>
   function myFunc(Sender,e){
     var key = e.which ? e.which : e.keyCode;

     if(key == someKey){ // cancel event and do something
        ev.returnValue = false;
        if(e.preventDefault) e.preventDefault();
        return false;
     }
   }
</script>

تحديث حاول واختبر هذا باستخدام jQuery

$(document).ready(function(){
$('#in').keydown(fn);
});

var cnt = 0;
function fn(e){
   var key = e.keyCode ? e.keyCode : e.which;
   cnt++;

   if(cnt == 10) {
  alert('event was fired 10 times. Last time with key: '+key);
      cnt = 0;
   }
}

الإجابة رقم 2

يتضمن مواصفات DOM 3 Events أحداث المفاتيح، لكنها لا تزال مسودة عمل لذلك من المرجح ألا تكون مدعومة على نطاق واسع بعد، لكنها يجب أن تكون مفيدة جدًا.

لتحويل رموز المفاتيح إلى أحرف، قد تجد Quriskmode مفيدًا. معرفة أي مفتاح تم الضغط عليه وأي المعدلات يجب أن تساعدك في الوصول إلى ما تريد. لاحظ أنه قد تواجه مشاكل في تعيين جميع لوحات المفاتيح إلى نفس مجموعات الأحرف لأن بعضها يحتوي على مفاتيح لا توجد في الأخرى (مثل مفتاح "ويندوز" من مايكروسوفت ومفتاح الأوامر من آبل). قد يكون هناك حاجة لبعض التجربة والخطأ.

أوه، وقد تجد المقالة جنون جافا سكريبت: أحداث لوحة المفاتيح مثيرة للاهتمام.