JavaScript 不允许在突出显示和插入时将点作为第一个



我正在尝试验证仅用于数字和小数的输入字段。但点不能是第一个!一切正常,除非有人选择/突出显示输入值并点击点,然后将点添加为第一个。尝试突出显示 0 并单击 dot(.( 它会让你先插入它。知道吗?

function isNumberKey(evt, obj) {
var charCode = (evt.which) ? evt.which : evt.keyCode
var value = obj.value;
var dotcontains = value.indexOf(".") != -1;  
if ((value.length==0) && (event.keyCode==46)) return false; // checking that length ==0 than not allow to enter '.'
if (dotcontains)
if (charCode == 46) return false;                                  
if (charCode == 46) return true;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;                  
return true;
}
<INPUT TYPE="TEXT" VALUE="0" onkeypress="return isNumberKey(event,this)">

您的value.length==0检查不应用的原因是您之前的值 (0( 使长度为 1。但是您可以扩展这个想法,并检查正在编辑的部分是否从位置 0开始

if (evt.target.selectionStart === 0 && (evt.keyCode==46)) return false; 

这将捕获从第一个位置开始的正在编辑的突出显示部分,以及光标刚刚在那里。

https://jsfiddle.net/nyzkdb81/9/

最新更新