2016-10-29 4 views
0

Я разрабатываю веб-приложение, где пользователю нужно вводить заглавные буквы. Я ограничил их использованием правой клавиши shift для некоторого ключа, например, a, s, d, f и левого сдвига для h, j, k, l (в основном, чтобы определить, использует ли пользователь правильную клавишу переключения для заглавных букв)Обнаружение нажатия левой или правой клавиши в нажатие клавиши - JQuery

Код ниже JQuery помогает определить, какая клавиша нажата, включая цифры, малые и заглавные буквы. Но это не говорит мне, есть ли он использовал влево/вправо для переключения заглавных букв

$(document).keypress(function(event){ 
    alert(String.fromCharCode(event.which)); 
}); 

После долгих поисков я нашел код для проверки обнаружить левый/правый сдвиг ключ

document.addEventListener("keyup", function(e){ 
var key = e.key + e.location; 
if(key == "Shift1") 
    alert('Left shift key'); 
if(key == "Shift2") 
    alert('Right shift key'); 
}); 

Как изменить сценарий JQuery так, чтобы всякий раз, когда нажата заглавная буква, я могу проверить, нажал ли он нажатием левой или правой клавиши смены

ответ

0

С небольшой помощью @Micheal Накаяма, я сделал это сам. Вот код:

<script> 
var shiftLeft 
var shiftRight 
document.addEventListener("keydown", function(e){ 
    var key = e.key + e.location; 
    if(key=="Shift1") 
    { 
    shiftLeft = 1 
    } 
    else if(key=="Shift2") 
    { 
    shiftRight = 1 
    } 
    else if(shiftLeft==1) 
    { 
    console.log("Left+"+e.key) 
    } 
    else if(shiftRight==1) 
    { 
    console.log("Right+"+e.key) 
    } 
    else { 
    console.log(e.key) 
    } 
}); 
document.addEventListener("keyup", function(e){ 
    var key = e.key + e.location; 
    if(key=="Shift1") 
    { 
    shiftLeft = 0 
    } 
    else if(key=="Shift2") 
    { 
    shiftRight = 0 
    } 
}); 
</script> 
1

Вы хотите проверить, нажата ли клавиша нажата и сохранить нажатую клавишу ключей в ассоциативный массив и проверить, если они истинны, когда другие клавиши нажаты, так:

var pressedKeys = []; 
var shift1Keys = []; //array of keys that are valid for shift1; 
var shift2Keys = []; //array of keys that are valid for shift2; 

document.addEventListener("keydown", function(e){ 
    var key = e.key + e.location; 

    if(key === "Shift1") { 
     pressedKeys['shift1'] = true; 
    } else if(key === "Shift2") { 
     pressedKeys['shift2'] = true; 
    } else { 
     pressedKeys[key] = true; 

     if(pressedKeys['shift1'] && shift1keys.indexOf(key) !== -1) { 
      alert('shift1 and key pressed'); 
     } else if (pressedKeys['shift2'] && shift2keys.indexOf(key) !== -1) { 
      alert('shift2 and key pressed'); 
     } 
    } 
}); 

document.addEventListener("keyup", function(e){ 
    var key = e.key + e.location; 

    if(key == "Shift1") { 
     pressedKeys['shift1'] = false; 
    } else if(key == "Shift2") { 
     pressedKeys['shift2'] = false; 
    } else { 
     pressedKeys[key] = false; 
    } 
}); 
+0

Спасибо за это. Но его не работает –

+1

Невысокий код. Его цель - дать вам направление. –

+1

Я понятия не имею, почему вы делаете ключ = e.key + e.location, это зависит от вас, чтобы выяснить, что за мелочи неправильно, потому что у меня нет вашего кода или ваших целей. –

1

Другие решения здесь не покрывают края случай обеих клавиш сдвига ПРОХОДИТ, которые не могут вести себя, как вы ожидаете.

С точки зрения браузера,

  • второй ключевой сдвиг, который состоится выиг повторные keydowns
  • второй ключевой сдвиг освободят выигрывает KeyUp

Это означает, что в соответствии поведение, которое вы должны отбросить предыдущие местоположения на каждом месте вниз, вот пример такой реализации, которая регистрируется только при использовании ключей вдоль стороны Shift

function tellMeWhere(type, e, meta) { 
    if (e.shiftKey) { 
     console.log(e.key, type + '\'d', 'with Shift', meta.Shift) 
    } 
} 

(function (callback) { 
    var metaKeyList = ['Alt', 'Control', 'Meta', 'Shift'], 
     metaKeys = {}; 
    window.addEventListener('keydown', function (e) { 
     if (metaKeyList.indexOf(e.key) !== -1) { 
      metaKeys[e.key] = e.location; 
     } else { 
      callback('down', e, Object.assign({}, metaKeys)); 
     } 
    }); 
    window.addEventListener('keypress', function (e) { 
     if (metaKeyList.indexOf(e.key) === -1) { 
      callback('press', e, Object.assign({}, metaKeys)); 
     } 
    }); 
    window.addEventListener('keyup', function (e) { 
     if (metaKeyList.indexOf(e.key) !== -1) { 
      delete metaKeys[e.key]; 
     } else { 
      callback('up', e, Object.assign({}, metaKeys)); 
     } 
    }); 
}(tellMeWhere)); 

Тогда говорят, что вы набрали сдвиг влево, выше будет войти

A down'd with Shift 1 
A press'd with Shift 1 
A up'd with Shift 1 

Тогда говорят, что вы набрали сдвига вправоZ, выше будет войти

Z down'd with Shift 2 
Z press'd with Shift 2 
Z up'd with Shift 2 
Смежные вопросы