所以两天前我实际上完成了这个问题的解决方案,但我必须离开才能发布答案。如果你仍然需要帮助,这里有一些东西可以看,虽然它可能有比你需要的更多的功能——我玩得很开心:)
$(".txt").on("keyup", function(event) {
// don't handle backspace, delete, pgup/pgdn, home/end, or arrow keys:
if (event.keyCode === 8 || event.keyCode === 46 || event.keyCode >= 33 && event.keyCode <= 40) return false;
var currentEl = $(this);
var value = $(currentEl).val();
// remove letters...
value = value.replace(/[^0-9.-]/g, "");
var hasDecPlace = value.match(/\./);
// separate integer from decimal places:
var pieces = value.split('.');
var integer = pieces[0].replace('-', '');
var decPlaces = ""
if (pieces.length > 1)
{
pieces.shift();
decPlaces = pieces.join('').replace('-', '');
}
// handle numbers greater than 12.00... :
if (parseInt(integer) > 12 || parseInt(integer) === 12 && parseInt(decPlaces) > 0)
{
integer = "12";
decPlaces = getZeroedDecPlaces(decPlaces);
alert("number must be between 0.00 and 12.00");
} // ...and less than 0:
else if (parseInt(integer) < 0)
{
integer = "0";
decPlaces = getZeroedDecPlaces(decPlaces);
alert("number must be between 0.00 and 12.00");
}
// handle more than two decimal places:
if (decPlaces.length > 2)
{
decPlaces = decPlaces.substr(0, 2);
alert("number cannot have more than two decimal places");
}
var newVal = hasDecPlace ? integer + '.' + decPlaces : integer;
$(currentEl).val(newVal);
});
function getZeroedDecPlaces(decPlaces) {
if (decPlaces === '') return '';
else if (decPlaces.length === 1) return '0';
else if (decPlaces.length >= 2) return '00';
}
--首先,处理keyup 事件--直到keypress 或keydown 之后才会将值添加到输入中
--不处理某些键 (return false)。您可以在此列表中添加更多内容。
--接下来,一种非正统的方法,将数字作为字符串处理:如果您真的不想使用<input type="number" /> 标签,请使用正则表达式从“数字”中取出字母和其他垃圾。
--现在,首先,确定是否有小数点,以便稍后重构“数字”(字符串)。接下来,将整数与小数位分开。
--现在通过解析整数(和小数位,如果number === 12)来处理大于 12.00 或小于 0.00 的数字。我使用了一个函数 (getZeroedDecimalPlaces) 来避免在用户字符串中添加额外的零或删除数字。
--下一步限制小数位数。我不知道你是否想要这个。我把它限制在小数点后两位,但它可以设置为任何值。
--最后,重构字符串并粘贴到输入中
Here is the JSFiddle