我想在文本框中输入小数点。我想通过在小数点后输入2位以上的数字来限制用户。我已经编写了用于在Keypress事件中实现该功能的代码。
function validateFloatKeyPress(el, evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
if (charCode == 46 && el.value.indexOf(".") !== -1) {
return false;
}
if (el.value.indexOf(".") !== -1)
{
var range = document.selection.createRange();
if (range.text != ""){
}
else
{
var number = el.value.split('.');
if (number.length == 2 && number[1].length > 1)
return false;
}
}
return true;
}
<asp:TextBox ID="txtTeamSizeCount" runat="server" onkeypress="return validateFloatKeyPress(this,event);" Width="100px" MaxLength="6"></asp:TextBox>
代码正在工作,但问题是:如果我输入“.75”,然后将其更改为“1.75”,则不可能。只有这样才能完全删除它,然后输入“1.75”。如果文本框中的小数点后有2位数字,则会出现此问题。我施加的条件是
a)十进制出现后,它必须至少有1或2位数字。例如,75或.7或10.75或333.55或333.2被接受。但不是.753或12.3335 b)小数点之前,用户不一定要输入数值。用户还必须能够输入整数。
你能告诉我可能是什么问题吗?
发布于 2018-05-08 15:35:09
你几乎在那里。只需检查小数点后面是否不超过2个字符。
function validateFloatKeyPress(el, evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
var number = el.value.split('.');
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
//just one dot (thanks ddlab)
if(number.length>1 && charCode == 46){
return false;
}
//get the carat position
var caratPos = getSelectionStart(el);
var dotPos = el.value.indexOf(".");
if( caratPos > dotPos && dotPos>-1 && (number[1].length > 1)){
return false;
}
return true;
}
//thanks: http://javascript.nwbox.com/cursor_position/
function getSelectionStart(o) {
if (o.createTextRange) {
var r = document.selection.createRange().duplicate()
r.moveEnd('character', o.value.length)
if (r.text == '') return o.value.length
return o.value.lastIndexOf(r.text)
} else return o.selectionStart
}
发布于 2018-05-08 16:45:09
你可以通过另一种方式使用onchange事件来做到这一点,不要限制用户输入,而只需要在输入后转换数字
function validateFloatKeyPress(el) {
var v = parseFloat(el.value);
el.value = (isNaN(v)) ? '' : v.toFixed(2);
}
<input id="aninput" type="text" onchange="validateFloatKeyPress(this);" />
45.846
应该是45.85
在你的代码用户需要转换他们自己,然后他们将45.85
直接键入
https://stackoverflow.com/questions/-100008415
复制相似问题