Скрипт не позволяет вводить с клавиатуры символы, отличные от указанных в специальном атрибуте "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