كيف يمكنني التعامل مع Arrowkeys و <(أكبر من) في وظيفة JavaScript؟ أي حدث وأي رمز (charcode أو keycode)؟
-
02-10-2019 - |
سؤال
كيف يمكنني التعامل مع arrowkeys و <
(أكبر من) في وظيفة جافا سكريبت؟ أي حدث وأي رمز (charcode أو keycode)؟
أنا في حيرة من أمري كيفية القيام بذلك. لقد قرأت هذا الرابط بعناية فائقة ،الأحداث ورمز المفاتيح+charcode, ، لكنني لم أجد أي حل لسيناريو.
المحلول
استخدام event.keyCode
كافي. تحتاج فقط إلى مشكلات توافق المتصفح فيما يتعلق بالحصول على الحدث الرئيسي في الاعتبار.
إليك مثال انطلاق أساسي يلتقط مفاتيح الأسهم ، ونسخه ،
<!DOCTYPE html>
<html lang="en">
<head>
<title>SO question 3181648</title>
<script>
document.onkeydown = function(e) {
e = e || event; // "real browsers" || IE6/7.
switch (e.keyCode) {
case 37: alert('left'); break;
case 38: alert('up'); break;
case 39: alert('right'); break;
case 40: alert('down'); break;
}
}
</script>
</head>
<body>
<p>Press one of the arrow keys.</p>
</body>
</html>
لاحظ أن إرفاق الأحداث من الأفضل القيام به هذه الطريق أو باستخدام jQuery.
لالتقاط الشخصيات المضغوطة مثل <
, ، القي نظرة على إجابة تيم.
نصائح أخرى
عند الكشف keydown
الحدث هو النهج الصحيح. للكشف عن شخصية مكتوبة مثل <
, ، باستخدام keypress
الحدث هو النهج الآمن الوحيد. إذا استخدمت بدلاً من ذلك keydown
الحدث و keyCode
الخاصية ، هذا غير مضمون للعمل على أنواع لوحة المفاتيح والمتصفحات المختلفة عنك.
إذا كنت تريد حقًا التعرف على معالجة مفاتيح JavaScript ، أوصي بالصفحة التالية: http://unixpapa.com/js/key.html
إليك مثال على متطلباتك:
document.onkeydown = function(evt) {
evt = evt || window.event;
switch (evt.keyCode) {
case 37: alert("left"); break;
case 38: alert("up"); break;
case 39: alert("right"); break;
case 40: alert("down"); break;
}
};
document.onkeypress = function(evt) {
evt = evt || window.event;
var charCode = evt.which || evt.keyCode;
var charStr = String.fromCharCode(charCode);
if (charStr == "<") {
alert("<");
}
};
<script type="text/javascript">
var Keys = {
BACKSPACE: 8, TAB: 9, ENTER: 13, SHIFT: 16,
CTRL: 17, ALT: 18, PAUSE: 19, CAPS: 20,
ESC: 27, PAGEUP: 33, PAGEDN: 34, END: 35,
HOME: 36, LEFT: 37, UP: 38, RIGHT: 39,
DOWN: 40, INSERT: 45, DELETE: 46,
n0: 48, n1: 49, n2: 50, n3: 51, n4: 52,
n5: 53, n6: 54, n7: 55, n8: 56, n9: 57,
A:65, B:66, C:67, D:68, E:68, F:70, G:71, H:72, I:73, J:74, K:75,
L:76, M:77, N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86,
W:87, X:88, Y:89, Z:90,
WINLEFT: 91, WINRIGHT: 92, SELECT: 93, NUM0: 96,
NUM1: 97, NUM2: 98, NUM3: 99, NUM4: 100,
NUM5: 101, NUM6: 102, NUM7: 103, NUM8: 104,
NUM9: 105, MULTIPLY: 106, ADD: 107, SUBTRACT: 109,
DECIMAL: 110, DIVIDE: 111, F1: 112, F2: 113,
F3: 114, F4: 115, F5: 116, F6: 117,
F7: 118, F8: 119, F9: 120, F10: 121,
F11: 122, F12: 123, NUMLOCK: 144, SCROLLLOCK: 145,
SEMICOLON: 186,EQUAL: 187, COMMA: 188, DASH: 189,
PERIOD: 190, FORWARDSLASH: 191, GRAVEACCENT: 192,
OPENBRACKET: 219, BACKSLASH: 220,
CLOSEBRACKET: 221, QUOTE: 222
};
/* true - will be handled also by default handler and for false - will not (if you wanna disable some keys) */
function pressedKeyHandler(key){
if (k != Keys.COMMA || k != Keys.DASH) return true;
//handle pressed button here
return true;
}
if (typeof window.event != 'undefined') // IE
document.onkeydown = function() { return pressedKeyHandler(event.keyCode); }
else // FireFox/Opera/Others
document.onkeypress = function(e) { return pressedKeyHandler(e.keyCode); }
</script>
قد أكون مخطئًا ولكن يبدو أنه من الأفضل أن تتعامل مع حدث OnKeydown بدلاً من Onkeypress.