Как установить ввод по умолчанию для нажатия клавиши ввода?

#javascript #html #reactjs #input

#javascript #HTML #reactjs #ввод

Вопрос:

У меня есть веб-страница, написанная на React (но она не должна иметь строго отношения к этому вопросу), которая состоит из нескольких входных данных, давайте назовем их именем, фамилией и кодом.

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

Есть ли способ сделать это легко?

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

1. Вы хотите вручную сфокусировать ввод в обязательном порядке? нравится использовать ссылку?

Ответ №1:

 let inputName = document.querySelector('input[name="name"]');
let inputSurname = document.querySelector('input[name="surname"]');
let inputCode = document.querySelector('input[name="code"]');

let focusedInput = null;

[inputName, inputSurname, inputCode].forEach((input) => {
  input.addEventListener('blur', () => {
    focusedInput = null;
  });
  input.addEventListener('focus', () => {
    focusedInput = input;
  });
});

document.body.addEventListener('keypress', () => {
  if (focusedInput == null) {
    inputCode.focus();
  }
}); 
 <div>
  <label>Name</label>
  <input type="text" name="name" />
</div>
<div>
  <label>Surname</label>
  <input type="text" name="surname" />
</div>
<div>
  <label>Code</label>
  <input type="text" name="code" />
</div> 

Ответ №2:

 const surnameInput = document.getElementById('surname-input');
... (= do for all inputs)

let activeInput;

surnameInput.onFocus = () => { activeInput = surnameInput };
...

surnameInput.OnBlur = () => { activeInput = undefined };
...

document.addEventListener('keypress', (ev) => {
    const input = activeInput ?? codeInput;
    input.value  = valueOftheKey;
}
 

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

Также: я не уверен, что это самый эффективный способ, но это вариант.

РЕДАКТИРОВАТЬ: ответ Костаса лучше 😉 за исключением null …вы должны использовать undefined