Показать сообщение отдельно
  #4 (permalink)  
Старый 13.02.2021, 17:46
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

рони,
Вот такая последовательность.
"a" "1" "2" Ставим курсор между "1" и "2" Backspace "3"
Получаем A23 вместо A32

Не самое оптимальное решение, но лишено этого недостатка
<style>
#mkb10:invalid {
	border:1px solid red;
}

</style>

<body>
<label>МКБ 10 <input id=mkb10 type=text pattern="[A-Z]\d\d(\.\d)?" required></label>
<script>
const mkb = document.getElementById('mkb10');

	const cyrcode = 'ФИСВУАПРШОЛДЬТЩЗЙКЫМЯГ';
	const latcode = 'ABCDEFGHIJKLMNOPQRSTVZU'
	let icode = '';
	let rcode = '';
	mkb.addEventListener('keydown', (e) => {
		rcode = '';
		icode = e.key;
		if (icode.length == 1) {
			const ind = cyrcode.indexOf(icode.toUpperCase())
			if (ind>=0) {
				rcode = latcode[ind];
			} else if ('a'<=icode && icode<='z') {
				rcode = icode.toUpperCase();
			}
			if (! (/[A-Z0-9\.]/.test(rcode || icode))) {
				e.preventDefault();
			}
			
		}
	})
	mkb.addEventListener('input', (e) => {
		if (rcode) {
			const is = mkb.value.indexOf(icode)
			mkb.value = mkb.value.replace(icode, rcode);
			mkb.setSelectionRange(is+1, is+1);
		}
	})

</script>

Последний раз редактировалось voraa, 13.02.2021 в 17:56.
Ответить с цитированием