HTML препятствует пробелу на странице прокрутки

Я использую код:

window.onkeydown = function(e) { 
    return !(e.keyCode == 32);
};

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

Есть ли способ предотвратить прокрутку пробела, а также сохранить функциональность пробела во время ввода?

Ответы

Ответ 1

Попробуйте проверить, является ли target тело:

window.addEventListener('keydown', function(e) {
  if(e.keyCode == 32 && e.target == document.body) {
    e.preventDefault();
  }
});
body { height: 100000px; }
<input />
<textarea></textarea>

Ответ 2

Вы можете посмотреть e.target, и если это тело, вы возвращаете false.

window.onkeydown = function(e) { 
  return !(e.keyCode == 32 && e.target == document.body);
}; 

Ответ 3

window.onkeydown = function(e) { 
    e = e || window.event;  //normalize the evebnt for IE
    var target = e.srcElement || e.target;  //Get the element that event was triggered on
    var tagName = target.tagName;  //get the tag name of the element [could also just compare elements]
    return !(tagName==="BODY" && e.keyCode == 32);  //see if it was body and space
};

Ответ 4

Вы можете проверить цель события и только запустить свой код, если он не является элементом типа. Например:

window.onkeydown = function(e) {
    var elem = e.target.nodename;
    if( elem !== 'TEXTAREA' && elem != 'INPUT' ) {
        return !(e.keyCode == 32);
    }
};