Скрипт не позволяет вводить с клавиатуры символы, отличные от указанных в специальном атрибуте "allowed".
Сначала создадим форму и текстовое поле, с которым предстоит работать скрипту:


<form name="myForm">
<input type="text" name="myEntry" allowed="0123456789.," id="inNum" >
</form>

В данной форме для поля ввода text обязательным является наличие атрибута allowed, так как непосредственно в нем указаны разрешенные для ввода в форму символы.

Далее внутри тегов script создаем функцию, которая будет обрабатывать каждый введеный символ на предмет соответствия его разрешенным символам:


// добавляем обработчики событий на загрузку формы и получение необходимых параметров
(function () {
	if (window.addEventListener) window.addEventListener("load",get_myNum,false);
	else if (window.attachEvent) window.attachEvent("onload",get_myNum);

	function get_myNum() {
		// здесь получаем элемент по его ID и далее добавляем к нему обработчики
		var inNum = document.getElementById("inNum");

		if (inNum.addEventListener)
		inNum.addEventListener("keypress",numFilter,false);
		else inNum.onkeypress = numFilter;
	}

	// функция проверяющая ввод с клавиатуры
	function numFilter(event) {
		var e = event || window.event;
		var code = e.charCode || e.keyCode;

		if (e.charCode == 0) return true;
		if (e.ctrlKey || e.altKey) return true;
		if (code < 32)  return true;

		var allowed = inNum.getAttribute("allowed");
		var cc = String.fromCharCode(code);

		if (allowed.indexOf(cc) != -1 ) {

			/* здесь добавляем функцию для работы с полем, в данном примере - это
				функция, которая отделяет пробелом разряды  и запятой целую и
				дробную части во введеном значении
			*/
			inNum.onchange = function () {

				var point = /./gi;
				var num = inNum.value;
				newstr = num.replace(point, ",");

				var outNum = num.split(",");

				outNum[0]=outNum[0].substr(0, outNum[0].length%3)+ outNum[0].substr(outNum[0].length%3).replace(/(\d{3})/g, " \$1");

				inNum.value = outNum.join(",");


				/* эта часть скрипта превращает полученную строку с пробелами опять
				   в число для возможного дальнейшего использования в расчетах:
				*/
				var remove = / /gi;
				newstr = inNum.value.replace(remove, "");

				/* здесь выведено числовое значение текстового поля
				   переменной myEntry, которое пригодится для  возможных
				   дальнейших расчетов в форме.
				*/
				var myEntry_value = parseFloat(newstr) + parseFloat("0."+outNum[1]);

			}

		} else {

			if (e.preventDefault) e.preventDefault();
			if (e.returnValue) e.returnValue = false;
			return false;

		}
	}

})();

Конечно данный скрипт нельзя считать 100%-панацеей от ввода неразрешенных значений, поскольку ctrl+c и ctrl+v не отключены. Основная задача скрипта - исключить ненамеренные опечатки, случайный ввод специальных символов и т.п. Замечания по работе скрипта и предложения пишите, пожалуйста, на freeden_codomaza@mail.ru

captcha