Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Замена нажатой клавиши другой (https://javascript.ru/forum/events/10520-zamena-nazhatojj-klavishi-drugojj.html)

sergiyko 08.07.2010 00:12

Замена нажатой клавиши другой
 
Здравствуйте!
Не могу понять как мне сделать замену кода нажатой клавиши другой. То есть мне нужно по нажатию одной клавиши вводить другие символы. Например, в текстовое поле можно вводить определенные символы, а другие заменять нулем. Короче говоря, нажимается одна буква, а в поле попадает другая.
У меня на текстовом поле событие
function setc(e) {
var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);
alert(key);
}
<input id="mytext" onkeypress="return setc(event);" type="text" value="">

Надо заменять на ходу, до попадания символа в поле. Я пробовал менять код клавиши так: e.charCode = 48; но пишет что нельзя менять setting a property that has only a getter
Как мне сделать правильно, чтобы работало?

exec 08.07.2010 07:03

<textarea id="txt"></textarea>
<script type="text/javascript">
	document.getElementById('txt').onkeypress = function (e) {
		e = e || window.event;
		if (e.keyCode == 97) {
			this.value += 'x';
			e.preventDefault ? e.preventDefault() : e.returnValue = false;
		}
	}
</script>

sergiyko 08.07.2010 11:20

exec,
У меня ваш код не работает. Работает так:
document.getElementById('txt').onkeypress = function (e) {
		e = e || window.event;
		key = (typeof  e.charCode == 'undefined' ? e.keyCode : e.charCode);
		alert(key);
		if (key == 49) {
			this.value += 'x';
			e.preventDefault ? e.preventDefault() : e.returnValue = false;
		}
	}

Но если вводить символы не в начало строки, то они добавляются в конец.

exec 08.07.2010 11:29

Вы под каким браузером смотрите?

pandasensey 08.07.2010 12:28

exec, по-моему, в реализации скрипта и не предполагается, что новый символ будет вставлен в текущую позицию.
this.value += 'x';
, или я не прав?

exec 08.07.2010 12:39

Да, точно. Нужно вычислять позицию курсора и вставлять туда.

pandasensey 08.07.2010 14:10

можно попробовать реагировать на два события (keyDown и KeyUp). В первом случае, ввыод еще не произошел, а во втором произошел. Сравнивая результаты, можно узнать позицию и заменить значение поля ввода на нужное, изменив символ на нужном месте...

sergiyko 08.07.2010 14:14

Файрфокс браузер.
Можно конечно сделать типа
onkeyup="this.value = this.value.replace(/1/g, '0')"

но тут видно какой символ ввели и только потом заменяется на нужный.


Часовой пояс GMT +3, время: 22:35.