Нет простого способа достичь того, что вы хотите, который потребовал бы много кода и проверки ввода. Вместо этого вы можете использовать оболочку и шесть input
элементов, немного их стилизовать и собирать значения для скрытого ввода ex. в режиме реального времени или в форме валидатора. Как то так:
function createTxtarea(parent, cols) {
// Set the cols of the "textarea"
const inputs = parent.querySelectorAll('input');
inputs.forEach(input => input.setAttribute('maxlength', cols));
// Add listener for Enter and ArrowUp/down keys
const focusTo = {
Enter: (e) => e.target.nextElementSibling,
ArrowDown(e) {return this.Enter(e);},
ArrowUp: (e) => e.target.previousElementSibling
};
parent.addEventListener('keydown', (e) => {
const key = e.key;
if (typeof focusTo[key] === 'function') {
e.preventDefault();
const prext = focusTo[key](e);
if (prext) prext.focus();
}
// Collect the value here if needed
});
}
createTxtarea(document.getElementById('area1'), 16);
.txtarea {
border: 1px solid #ccc;
padding: 1px;
display: inline-block;
}
.txtarea input {
border: none;
display: block;
}
<form>
<div id="area1" class="txtarea">
<input type="text" name="area1[]">
<input type="text" name="area1[]">
<input type="text" name="area1[]">
<input type="text" name="area1[]">
<input type="text" name="area1[]">
<input type="text" name="area1[]">
<input type="text" name="area1[]">
</div>
</form>
Суффикс входных имен с []
делает их доступными в виде массива на бэкэнде, так что вы можете легко извлечь одно значениес входов на сервере тоже.
Вы можете улучшить основной код. Можно легко создать несколько «txtareas», и при необходимости код можно преобразовать в ООП, и можно динамически создавать входы и даже родительский элемент.
Код игнорируется в телефонах, но заполнение«txtarea» все еще свободно говорит. Если вы добавите атрибуты maxlength
в HTML, «txtarea» будет работать более свободно, чем настраиваемый реальный элемент textarea, если JS выключен.