我正在驗證input type ='text'元素。我已經連接'粘貼'和'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