Выполнение JS-кода после нажатия клавиши пробела

#javascript #keyup

#javascript #ввод

Вопрос:

это мой код на JavaScript:

 var changeIdValue =  function(id, value) {
document.getElementById(id).style.height = value;
};

document.getElementById ("balklongwaarde").addEventListener("click", function(){ changeIdValue("balklongwaarde", "60px")});

document.getElementById ("balklevensverwachting").addEventListener("click", function(){ changeIdValue("balklevensverwachting", "60px")});

document.getElementById ("balkhart").addEventListener("click", function(){ changeIdValue("balkhart", "60px")});

document.getElementById ("balklever").addEventListener("click", function(){ changeIdValue("balklever", "60px")});

document.getElementById("balkhersenen").addEventListener("click", function(){ changeIdValue("balkhersenen", "60px")});
 

Я хочу выполнить этот код после нажатия клавиши….

Кто-нибудь знает, как это сделать?

Комментарии:

1. При вводе ключа для чего? Любой из этих элементов?

2. Это может быть очень полезно, это было для меня. dmauro.github.io/Keypress

Ответ №1:

Существовал метод with keyCode , который теперь устарел, как указано в комментариях. Таким образом, я отредактировал ответ.

В настоящее время существует несколько других способов сделать это. Я также включаю устаревший на всякий случай.

 document.body.onkeyup = function(e) {
  if (e.key == " " ||
      e.code == "Space" ||      
      e.keyCode == 32      
  ) {
    //your code
  }
}
 

БОНУС: я сделал быстрый фрагмент, чтобы получить код ключа любого символа. Это довольно просто в использовании: просто введите любую букву в текстовое поле ниже.

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

 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><input type="text" placeholder="enter a char here" id="char-finder"><p class="key"> <pr>key</pr> for <pr class="char">space</pr> is <pr class="tr">amp;nbsp;</pr></p><p class="code"> <pr>code</pr> for <pr class="char">space</pr> is <pr class="tr">Space</pr></p><p class="keycode"> <pr>keyCode</pr> for <pr class="char">space</pr> is <pr class="tr">32</pr></p><script>document.getElementById('char-finder').onkeyup=function(e){key=e.key==" " ? "amp;nbsp;" : e.key; code=e.code; kcode=e.keyCode; char=e.key==" " ? "space" : e.key; $(".key .tr").html(key); $(".code .tr").html(code); $(".keycode .tr").html(kcode); $(".char").html(char);}</script><style>body{font-size: 17px;}input{border: 1px solid grey; border-radius: 10px; font-size: 15px; padding: 5px;}pr{font-family: Menlo; padding: 3px; border-radius: 5px; font-size: 15px; display: inline-flex; justify-content: center; background: rgb(230, 230, 230); min-width: 20px;}.key pr:first-child{background: rgb(0, 230, 230);}.keycode pr:first-child{background: rgb(230, 0, 50); color: white;}.code pr:first-child{background: rgb(230, 230, 0);}pr.tr{margin-left: 5px; border: 1px solid black; background:transparent;}</style> 

Комментарии:

1.По-видимому, keyCode устарел. Возможно, было бы лучше использовать: if (e.keyCode === 32 || e.key === ' ')

2. в iOS все в порядке, он не работает в мобильных веб-браузерах Android

3. @z0r кажется, что IE не распознает e.key === ' ' , но e.key === 'Spacebar'

Ответ №2:

Версия 2019 года будет следующей: (работает во всех основных браузерах — Chrome, Firefox, Safari)

Ссылка на спецификацию — https://www.w3.org/TR/uievents/#dom-keyboardevent-code

код содержит строку, которая идентифицирует нажатую физическую клавишу. На значение не влияет текущая раскладка клавиатуры или состояние модификатора, поэтому конкретная клавиша всегда будет возвращать одно и то же значение. Неинициализированное значение этого атрибута ДОЛЖНО быть «» (пустая строка).

 // event = keyup or keydown
document.addEventListener('keyup', event => {
  if (event.code === 'Space') {
    console.log('Space pressed')
  }
}) 

Ответ №3:

В jQuery события нормализуются в соответствии с каким свойством события.

Здесь вы можете найти любое значение ключа, например: значение пробела (32).

Эта функция может вам помочь.

 $(window).keypress(function(e) {
    if (e.which === 32) {

        //Your code goes here

    }
});
 

Комментарии:

1. Отличный ответ! Спасибо

Ответ №4:

document.activeElement это любой элемент, имеющий фокус. Вы часто обнаружите, что и пробел, и ввод запускают щелчок по сфокусированному элементу.

 document.body.onkeyup = function(e){
    if(e.keyCode == 32 || e.keyCode == 13){
        //spacebar or enter clicks focused element
        try {
            doc.activeElement.click();
        }
        catch (e) {
            console.log(e);
        }            
    }
};  
 

Тогда CSS может быть:

 .focusable-thing:hover {
    cursor: pointer;
}
.focusable-thing:focus {
    -webkit-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    -moz-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
}
 

Комментарии:

1. кто-нибудь может сказать мне, что onkeyup происходит document.body.onkeyup . Что это значит и почему оно используется

Ответ №5:

keyCode не рекомендуется. Вместо этого вы могли бы использовать key (символ, сгенерированный нажатием клавиши) или code (физическая клавиша на клавиатуре). Использование того или иного может иметь разные результаты в зависимости от раскладки клавиатуры.

 document.addEventListener('keydown', (e) => {
    if (e.code === "Space") {
        // Do your thing
    }
});
 

или

 document.addEventListener('keydown', (e) => 
    if (e.key === " ") {
        // Do your thing
    }
});
 

Комментарии:

1. Вы правы, я допустил опечатку, я отредактировал ответ 🙂