话不多说 直接上代码了 有IE8的帮忙调调 问题比较有挑战<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
<script type="text/javascript">
//控制文本框输入必须符合数据库中decimal格式(len,x)
//(4,2)有效长度4,即去除小数点最多4位,小数点部分最多2位
//1111 111.1 1.2 11.22 true
// 1111.22 1111.222 false
window.onload= function() {
var t1=document.getElementById('t1');
var len=4,x=2;
if(x==0) {
str="^(?!0{2,})(?!0\\d+)\\d{0,"+len+"}$";//小数位0
} else if(x==1) {//小数位1时
str="^(?!0{2,})(?!0\\d+)(?:\\d{1,"+(len-x)+"}\\.?[\\d+]{0,"+x+"})(?!\\.)$";
} else {//小数位>=2
str="^(?!0{2,})(?!0\\d+)(?:\\d{1,"+(len-x)+"}\\.?[\\d+]{0,"+x+"}|\\d{1,"+((len-x)+1)+"}\\.?[\\d+]{0,"+(x-1)+"})(?!\\.)$";
}
var reg=new RegExp(str);
t1.onpropertychange= function() {
if(this.value.length>0) {
if(!reg.test(this.value)) {
this.value=this.value.substring(0,this.value.length-1);
//每次删除value最后一个字符,再赋值value之后当然就又会自动触发onpropertychange
//如果不满足正则,就又会再删一个字符,就这样不断触发onpropertychange直到正则验证通过
//IE8下会出现间歇性触发的问题,输入aa就看到效果了,输第一个a之后触发了把a删掉,输第二个a时候就不会触发了
//如果给文本框加个padding:0就正常了,但是如果再加上width:100px就又复发了
//去掉DOCTYPE头也可以 但是你懂得,影响页面布局了
}
}
return false;
};
};
</script>
</head>
<body>
<input type="text" id="t1" style="padding:0;" />
</body>
</html>
<head>
<title>无标题页</title>
<script type="text/javascript">
//控制文本框输入必须符合数据库中decimal格式(len,x)
//(4,2)有效长度4,即去除小数点最多4位,小数点部分最多2位
//1111 111.1 1.2 11.22 true
// 1111.22 1111.222 false
window.onload= function() {
var t1=document.getElementById('t1');
var len=4,x=2;
if(x==0) {
str="^(?!0{2,})(?!0\\d+)\\d{0,"+len+"}$";//小数位0
} else if(x==1) {//小数位1时
str="^(?!0{2,})(?!0\\d+)(?:\\d{1,"+(len-x)+"}\\.?[\\d+]{0,"+x+"})(?!\\.)$";
} else {//小数位>=2
str="^(?!0{2,})(?!0\\d+)(?:\\d{1,"+(len-x)+"}\\.?[\\d+]{0,"+x+"}|\\d{1,"+((len-x)+1)+"}\\.?[\\d+]{0,"+(x-1)+"})(?!\\.)$";
}
var reg=new RegExp(str);
t1.onpropertychange= function() {
if(this.value.length>0) {
if(!reg.test(this.value)) {
this.value=this.value.substring(0,this.value.length-1);
//每次删除value最后一个字符,再赋值value之后当然就又会自动触发onpropertychange
//如果不满足正则,就又会再删一个字符,就这样不断触发onpropertychange直到正则验证通过
//IE8下会出现间歇性触发的问题,输入aa就看到效果了,输第一个a之后触发了把a删掉,输第二个a时候就不会触发了
//如果给文本框加个padding:0就正常了,但是如果再加上width:100px就又复发了
//去掉DOCTYPE头也可以 但是你懂得,影响页面布局了
}
}
return false;
};
};
</script>
</head>
<body>
<input type="text" id="t1" style="padding:0;" />
</body>
</html>
解决方案 »
- 非常急!寻求JS关于读取调用对比问题。
- 如何统计数据整和,求解决方案,目前的思路是循环遍历,但是具体不知道如何写好,跪求高手解答。
- 谁用过jqgrid的cell editing?
- 有没有firefox高手,帮我看看下面的js问题
- jquery怎么去掉div,而保留它里面的文字
- js 图片路径的问题
- 提交问题
- 各位大虾们帮帮忙,在网页上自己做一个右键菜单,但是这个菜单死活不显示!急急急急急急急!!!!
- 菜鸟提问:如何在js中实现如csdn中那种在1024x768下自动居中
- 点击单选项显示或隐藏的问题?
- 请教下面的JS语句那里的问题,在IE7运行正常而在IE6却出错提示:缺少对象;请帮忙修改下
- 新手问题又来了
var isOpen = true; // 闭包生成一个onpropertychange的开关
return function(){
if (isOpen ) return;
isOpen = false; // 先关闭开关
// 做其他事情 isOpen = true;//最后再打开开关
};
})()
如果设置了width,就再设置height就可以解决了。
<input type="text" id="t1" style="padding:0;width:100px;height:18px;" />
可惜对onpropertychange情有独钟