предотвратите ввод ключевого события, не предотвращая прокрутку - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу запретить действия по умолчанию, кроме прокрутки.Когда я добавил событие e.preventDefault в keyDown (ключ Enter ), оно также предотвращает прокрутку браузера.Я хочу запретить действия при нажатии клавиши ввода, кроме прокрутки.Есть ли какой-нибудь способ различить клавишу ввода события и прокрутки?Или мы можем частично запретить действия по умолчанию, когда прокрутка должна работать, а другие действия запрещены.Любая помощь будет высоко ценится.

document.getElementById('textBox').addEventListener("keydown", function(event) {
    // Number 13 is the "Enter" key on the keyboard
        if (event.keyCode === 13) {
            // Cancel the default action, if needed
            event.preventDefault();
        }
    });

Я добавил preventDefault в действии ввода.По какой-то причине я должен добавить эту строку в код, но это также препятствует прокрутке моей страницы.Я хочу оставить preventDefault, но моя страница должна прокрутиться.Есть ли способ сделать это?

1 Ответ

2 голосов
/ 25 сентября 2019

Просто добавляйте новую строку в textarea при каждом запуске события.

document.getElementById('textBox').addEventListener("keydown", function(event) {
  // Number 13 is the "Enter" key on the keyboard
  if (event.keyCode === 13) {
    var cursor= this.selectionEnd;
    this.value = this.value.substring(0, cursor) + '\n' + 
    this.value.substring(cursor);
    this.selectionEnd = cursor+1;
    event.preventDefault();
  }
});
<textarea style="height:200px;width:300px" id="textBox"></textarea>

Примечание: Я заметил, что OP использует contenteditable в этом случае. Здесь - это форк JSFiddle ОП.Я сделал несколько изменений, чтобы сделать разные элементы редактируемыми, потому что это казалось более подходящим.

...