<script language=javascript>
function isNumber(obj){
event.returnValue = false;
if(event.keyCode==8 || event.keyCode==46 ||event.keyCode>=35 && event.keyCode<=39){
event.returnValue=true;
}
if(event.keyCode==190 && obj.value.indexOf(".")==-1){
event.returnValue=true;
}
if(event.keyCode>=48 && event.keyCode<=57){
event.returnValue=true;
}
}
</script>
<input type="text" οnkeydοwn="isNumber(this);" >
上面的这个算法比较糙,很多问题都没有考虑,今天有对其进行了一些完善,主要是增加了对firefox的支持,如下
<script language=javascript>
function isNumber(e, obj, withFraction){
if (!e){
e = window.event;
}
if(e.which) {
key = e.which;
} else {
key = e.keyCode;
}
validNumber = false;
if(key==8 //Backspace
|| key==46 //Delete
|| key>=35 && key<=37 //End, Home, Left
|| key==39 //Right
){
validNumber = true;
}
if(!e.shiftKey) {
//only check shift is not pressed
if(withFraction
&& obj.value.length > 0
&& key==190 //period
&& obj.value.indexOf(".")==-1){
validNumber = true;
}
if(key==48 && obj.value.length>0) { // 0
validNumber = true;
}
if(key>=49 && key<=57){ // 1~9
validNumber = true;
}
}
if(!validNumber) {
if(e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
}
}
</script>
<input type="text" οnkeydοwn="isNumber(event,this,true);" >
上面这个算法也有些问题,我总结如下,有兴趣的朋友可以自己完善一下。
1) 不支持复制粘贴快捷键ctrl+c ctral+v
2) 没有右键菜单
3) 没有考虑入负号,只考虑正整数的情况
4) 不支持替换输入,也就是先选中输入框中的文本,然后在数据