Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   keydown и keyup не видят обычных буквенных клавиш (https://javascript.ru/forum/events/61510-keydown-i-keyup-ne-vidyat-obychnykh-bukvennykh-klavish.html)

Tecvid 21.02.2016 16:40

keydown и keyup не видят обычных буквенных клавиш
 
здравствуйте, такая проблемка...

данный код работает как надо:
document.getElementById('area').addEventListener('keydown', function (e) {
	if (e.ctrlKey)
		alert('event fired');
});


но стоит проверить ещё и какую-то другую клавишу, нничего не срабатывает:

document.getElementById('area').addEventListener('keydown', function (e) {
	var keyCode = e.keyCode || e.which;

	if (e.ctrlKey && keyCode == 98)
		alert('event fired');
});


подскажите пожалуйста в чём проблема

рони 21.02.2016 16:57

Tecvid,
надо собирать коллекцию нажатых клавиш
http://javascript.ru/forum/events/26...tml#post163776

Tecvid 21.02.2016 17:05

рони,
благодарю, рабоает) но не знаю как туда вписать клавишу ктрл

рони 21.02.2016 17:11

Tecvid,
if ( keys.length === args.length && e.ctrlKey)

Tecvid 21.02.2016 17:20

всё отлично, но появилась другая проблема :D :/
мне надо бло запретить ctrl+<оперделённые клавиши>, с алертом всё работает, а вот с перевендефолт нет, куда бы его не вписал

рони 21.02.2016 17:26

Tecvid,
if ( keys.join() === args.join() ) func();
if ( keys.join() === args.join()) e.preventDefault();

Tecvid 21.02.2016 17:31

спасибо, но не получается, я всего лишь хочу запретить ctrl+b, ctrl+i и ctrl+i

рони 21.02.2016 17:51

Tecvid,
а так ?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
</head>

<body>
<p></p>
<script>
  function runOnKeys(codes) {
      var pressed = {};
      document.addEventListener('keydown', function(e) {
          e = e || window.event;
          pressed[e.keyCode] = true;
          for (var i = 0; i < codes.length; i++) {
            if (!pressed[codes[i]]||!e.ctrlKey) {
              return;
            }
          }
          pressed = {};
          e.preventDefault();
        },false);
        document.addEventListener('keyup', function(e) {
          e = e || window.event;
          delete pressed[e.keyCode];
        },false);
      }

 runOnKeys(
      ["B".charCodeAt(0)]
      );
 runOnKeys(
      ["I".charCodeAt(0)]
      );
</script>



</body>

</html>

Tecvid 21.02.2016 18:13

рони,
так уже получилось, благодарю! :)

Tecvid 21.02.2016 23:18

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

document.getElementById('area').addEventListener('keydown', function (e) {
	var keyCode = e.keyCode || e.which;

	if (e.ctrlKey && (keyCode == 66 || keyCode == 73 || keyCode == 85))
		e.preventDefault();
});


Часовой пояс GMT +3, время: 18:31.