Я делаю проверку на элемент ввода = 'текст'. Я подключил события «paste» и «keydown», чтобы захватить входные данные и ограничить их просто цифрами. Keydown, похоже, работает без сучка и задоринки, однако я не мог заставить ни один из браузеров фактически НЕ Вставить текст в поле (я вижу, что есть событие beforepaste, которое может быть билетом - однако оно появляется чтобы не поддерживать Firefox. В конце концов, я привел к простому закрытию ввода, если значение не было числом. Это вызывает мгновенное мерцание, но, похоже, работает.Проверка числового ввода
Есть ли более чистый способ сделать это ? Я там что-то отсутствует? это все равно, чтобы предотвратить мерцание? Я знаю, что HTML5 имеет тип = «число», но я не готов пойти туда еще.
<input type="text" id="number" />
<script type="text/javascript">
$(document).ready(function() {
enableNumericOnlyEntry("#number");
function enableNumericOnlyEntry(object) {
$(object).bind('paste', numericOnlyPaste);
$(object).bind('keydown', null, numericOnlyKeyDown);
function numericOnlyPaste(event) {
var inputText = "";
var element = event.target;
setTimeout(function() {
var text = $(element).val();
if (isNaN(text)) {
$(element).val("")
return false;
}
}, 0);
}
function numericOnlyKeyDown(event) {
// Allow: backspace, delete, tab, escape, and enter
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
// Allow: Ctrl+A/a
(event.keyCode == 65 || event.keyCode == 97) && (event.ctrlKey === true) ||
// Allow: Ctrl+C/c
(event.keyCode == 67 || event.keyCode == 99) && (event.ctrlKey === true) ||
// Allow: Ctrl+V/v
(event.keyCode == 86 || event.keyCode == 118) && (event.ctrlKey === true) ||
// Allow: Ctrl+X/x
(event.keyCode == 88 || event.keyCode == 120) && (event.ctrlKey === true) ||
// Allow: home, end, left, right
(event.keyCode >= 35 && event.keyCode <= 39)) {
// let it happen, don't do anything
return true;
}
else {
// Ensure that it is a number and stop the keypress
if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
return false;
}
}
}
}
});
Не многие браузеры поддерживают его еще, но HTML5 имеет тип номера для ввода именно так. Вам все равно понадобится это для обратной совместимости, но по крайней мере вы можете воспользоваться новыми функциями. – qw3n