<input style="ime-mode:disabled" οnkeydοwn="myKeyDown()">
<script language="javascript">
function myKeyDown()
{
var k=window.event.keyCode;
if ((k==46)||(k==8)||(k==189)||(k==109)||(k==190)||(k==110)|| (k>=48 && k<=57)||(k>=96 && k<=105)||(k>=37 && k<=40))
{}
else if(k==13){
window.event.keyCode = 9;}
else{
window.event.returnValue = false;}
}
</script>
ascii码说明:
8:退格键
46:delete
37-40: 方向键
48-57:小键盘区的数字
96-105:主键盘区的数字
110、190:小键盘区和主键盘区的小数点
189、109:小键盘区和主键盘区的负号
13:回车
9: Tab 就是那个把焦点移到下一个文本框的东东。
对了还有两个缺点:
1、没有验证多个小数点的情况。
针对这些缺点 在文本框里再加入一个正则式的判断 就可以很好的解决多个小数点的情况了 跟改后如下:
<input style="ime-mode:disabled" οnkeydοwn="myKeyDown()" οnkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')" >
第二种方法:
<asp:TextBox ID="txt_p_price" onpropertychange="if(isNaN(value)) value=value.substring(0,value.length-1);"
runat="server" Width="30%" CssClass="titlerule"></asp:TextBox>
输入保留小数点后面的位数:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function testA(e){
var testValue =document.getElementById(e.id);
var temp = testValue.value.replace(/[^\d\.]/g,'');
//如果要输入3位 就匹配表达式改为 regE = /^\d*\.?\d{0,3}$/;
var regE = /^\d*\.?\d{0,2}$/;
var str='';
var i = 1;
while(i<=temp.length)
{
var gd;
gd = temp.substring(i,0);
if(regE.test(gd) == true)
{
str=gd;
}
i++;
}
testValue.value = str;
if(parseFloat( testValue.value) >=1 || parseFloat( testValue.value)<0){
testValue.value='0.00';
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<input id="testA" οnkeyup="testA(this)" >
<input id="testB" οnkeyup="testA(this)" >
</BODY>
<HTML>