Есть ли способ получить ввод текста в Javascript/Html без текстового поля?

Я пытаюсь создать собственный терминал как веб-сайт с пользовательскими командами, но я изо всех сил пытаюсь получить ввод текста без использования текстового поля. Я пробовал это:

<input type='text' id='textInput'>

но он создает текстовое поле. Я также пытался использовать прослушиватель событий как таковой:

document.addEventListener('keyup', (event)=>{
        if (event.keyCode == 65 ) {
            msg += 'a';
        }
});

но не работает, выдает ошибку: ReferenceError: документ не определен

и даже если бы это было так, делать это для каждого ключа было бы медленно.

простите мою наивность, но может быть достаточно использовать текстовое поле или текстовую область, стилизованную с помощью css

Kevin Crum 23.12.2020 20:31

не уверен, как документ не определен.... Как вы добавляете это на страницу? Какой браузер?

epascarello 23.12.2020 20:33

@KevinCrum Я очень плохо разбираюсь в css, поэтому, если бы вы могли показать мне пример, это было бы очень полезно, спасибо.

m.said 23.12.2020 20:33
developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keydocument.addEventListener('keyup', (event)=>{ console.info(event.key) });
epascarello 23.12.2020 20:35

@epascarello Я следил за ним, теперь он выдает эту ошибку: ReferenceError: addEventListener не определен

m.said 23.12.2020 20:38

Опять же.... Как вы добавляете это на страницу? Какой браузер? –

epascarello 23.12.2020 20:39

Извините, я очень тупой, поэтому прошу прощения. Я написал код ввода с клавиатуры в бэкэнде, а не во внешнем интерфейсе. убей меня

m.said 23.12.2020 20:42

@ 2F33T - в чем проблема?

vsync 23.12.2020 20:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
530
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Если вы хотите вводить данные, но не хотите отображать текстовое поле, я предлагаю установить CSS для текстового поля на opacity: 0; - пример:

<input style = "opacity: 0;" id = "textInput" />

<script>
document.getElementById('textInput').focus(); // focus on the element
document.getElementById('textInput').addEventListener('keyup', (event) => {
        if (event.keyCode == 65 ) {
            msg += 'a';
        }
});
</script>

Обновлено: обновлен ответ для использования opacity вместо display в CSS

Вы не можете сфокусировать ввод, который display: none

blex 23.12.2020 20:43

@blex Обновил ответ.

c00kie 23.12.2020 20:45

Да, это сработает, но второй пример кода OP проще, поскольку он не требует ввода и работает нормально.

blex 23.12.2020 20:48
Ответ принят как подходящий
let txt = document.getElementById('textInput')
txt.addEventListener('keyup', (event) => {
        if (event.keyCode == 65 ) {
            msg += 'a';
        }
});

И если вам не нравится внешний вид ввода текста с помощью поля, вы всегда можете отредактировать его самостоятельно с помощью CSS.

Вы можете сделать что-то вроде этого:

<style>
    #bg{
        background-color: black;
        padding: 10px;
    }
    #textInput{
        color: green; #Change to a color you like
        border: None;
        outline: None;
        line-height: 25px;
        font-family: monospace; #You can also change
        background-color: transparent;
        width: 100%;
</style>
<div id='bg'>
    <input type='text' id='textInput' >
</div>

Вам не нужен контур текстового поля? Если это так, попробуйте установить его значение на 0px:

<input type = "text" style = "border: 0px none;" />

Также попробуйте получить ввод непосредственно из окна подсказки:

<button onclick = "promptValue()">Try it</button>

<p id = "enteredValue"></p>

<script>
function promptValue() {
  var textValue = prompt("Please enter a value");
  document.getElementById("enteredValue").innerHTML = textValue;
}
</script>

Несколько исправлений синтаксиса, которые могут помочь:

  1. Используйте window вместо document для addEventListener. document, вероятно, следует использовать, если вы требуете, чтобы что-то произошло с одним конкретным элементом. (например, document.querySelector('#searchbox').)
  2. Использование keydown может быть более эффективным, чем keyup для клавиатурных команд.
  3. Используйте строгое равенство (===) вместо классического равенства (==).
  4. keyCode устарел. Вместо этого используйте key. Также будет легче кодировать. (Примечание: если вам нужно использовать заглавную букву А, рассмотрите возможность использования event.key === 'A' && event.shiftKey.)
window.addEventListener('keydown', (event) => {
        if (event.key === 'A' ) {
            msg += 'a';
        }
});

Другие вопросы по теме