Я пытаюсь ограничить ввод текста только числами, проверив его в setInterval и удалив символы, которые не являются числами. Пока это работает относительно хорошо, однако я не могу удалить «специальные символы». Например, если я ввожу символ испанского акцента ' или такие символы, как ˇ, которые должны быть над символом, он сбрасывает поле, и значение не присваивается снова, несмотря на то, что символ удаляется из строки (если я регистрирую строку, Я вижу, что это).
Пример:
- Ввод 123a => 'a' удален, ввод содержит 123
- Ввод 123ˇ => input содержит пустую строку, несмотря на то, что строка 'text' содержит 123 и имеет длину 3.
- Ввод 123 и вставка ˇ после него => ˇ удаляется, ввод содержит 123
Кажется, это как-то связано с тем фактом, что специальные символы не являются ... самостоятельными (?) и должны быть над символом, который должен быть введен следующим. Есть идеи, как это решить? Спасибо.
У меня есть следующий HTML:
<body>
<input type="text" id="input_field">
</body>
И JS:
$("#input_field").focus(function(e) {
console.log("got focus"+$(this).val());
var obj = this;
intID = setInterval(function() {restrictNumbers(obj)}, 10);
});
$("#input_field").blur(function(e) {
console.log("got blur")
clearInterval(intID);
});
function restrictNumbers(field) {
var text = $(field).val();
var caretPos;
var modified = false;
if(text.length > 0) {
for(var i=0; i<text.length; i++) {
if(isNaN(text.charAt(i))) {
modified = true;
caretPos = field.selectionStart - 1;
text = text.replace(text.charAt(i), "");
i--;
}
}
$(field).val(text);
if(modified) {
modified = false;
field.setSelectionRange(caretPos, caretPos);
}
}
}
Пример JSfiddle: http://jsfiddle.net/AvMZ5/