js限制textbox输入 大哥们,如何利用js限制textbox只能输入数字呢, 无法输入汉字,字母,和全角状态下的数字 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <input type=text onkeypress="if(event.keyCode<47 || event.keyCode>57)return false;"> <input type=text onkeypress="if(event.keyCode<47 || event.keyCode>57){alert('不可以输入数字');};"> <input type=text onkeypress="if(event.keyCode<47 || event.keyCode>57)return false;"> 这个方法不能输入小数点的,我自己再写公司的项目的时候,写了一个方法,可供参考。function valiNum(code,str,obj){ if (str=="") str="0123456789"; if (str==".") str="0123456789."; var ch=String.fromCharCode(code); if ((str.indexOf(ch)==-1) ||(str=="0123456789."&&isNaN(obj.value+ch))){ //因为要避免重复输入小数点,所以要加这个判断 alert("输入的字符不符合要求,请重新输入!"+ch); obj.focus(); return false; } obj.focus(); return true;}调用的文本框:<input type=text onkeypress="return(valiNum(event.keyCode, '',this))">如允许输入小数点的:<input type=text onkeypress="return(valiNum(event.keyCode, '.',this))"> 如果确实要限制全角状态或者汉字的输入,你可以把onkeypress改为onkeydown,但这样的话,左右光标键和删除、倒格都不能用了。要写一个更详细的function才可以。 昨天回复了LZ的贴子之后,奋战了几个小时,写了一个测试的页面,里面的valiNum应该就是LZ想要的内容,只要把里面obj1的内容去掉即可。如果还有更好的方法,欢迎各位高手不吝赐教,一起交流。<html><head><meta http-equiv="Content-Language" content="zh-cn"><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>测试onkey事件</title><script>function test(obj0,code, obj1){ obj1.value+=code+"\n"; if (obj0.value.length>10&&code!=8&&code!=46 &&code!=37&&code!=39) return false;}function valiNum(obj0,code,obj1,dot){ obj1.value+=code+"\n"; if (code==8||code==9||code==46||(code>32&&code<41)) return true; if (obj0.value.length>10) return false; if (code>47&&code<58) return true; if (dot=="."&&code==190) if (isNaN(obj0.value+".")) return false; else return true; return false;}</script></head><body><table border="1" width="80%" id="table1" height="231"><tbody align=center> <tr> <td colspan="2" height="31">onkeypress事件</td> <td colspan="2" height="31">onkeydown事件</td> <td colspan="2" height="31">onkeyup事件</td> <td colspan="2" height="31">校验数字</td> </tr><tr> <td>按键key</td><td>键值keyCode</td> <td>按键key</td><td>键值keyCode</td> <td>按键key</td><td>键值keyCode</td> <td>按键key</td><td>键值keyCode</td> </tr><tr> <td><textarea cols=8 rows=13 onkeypress="return(test(this,event.keyCode, b))"></textarea></td> <td><textarea cols=8 rows=13 id=b></textarea></td> <td><textarea cols=8 rows=13 onkeydown="return(test(this,event.keyCode, d))"></textarea></td> <td><textarea cols=8 rows=13 id=d></textarea></td> <td><textarea cols=8 rows=13 onkeyup="return(test(this,event.keyCode, f))"></textarea></td> <td><textarea cols=8 rows=13 id=f></textarea></td> <td><textarea cols=8 rows=13 onkeydown="return(valiNum(this,event.keyCode, g,'.'))"></textarea></td> <td><textarea cols=8 rows=13 id=g></textarea></td> </tr></tbody></table></body></html> 这样不好吧,复制进去就不能限制了,我还是倾向搞一个临时变量,在valuechange时用isNaN()来判断控件的value,如果不对,就把临时变量整回去如果不让显示错误的输入,keyup时判断也可以 我试过了,按Ctrl-C的可以限制,用鼠标粘贴的就不行。还有keyup是不能发辉作用的,例如如果你长按一个键,例如是“A的”的话,就会出来很多个A字母的。另外,可以在要输入的textarea里面增加一个 onpaste="return(false)" 属性,就能防止所有粘贴行为了。 <script type="text/javascript"> //只能输入数字 function InputNumber(obj) { if (event.keyCode < 48 || event.keyCode > 57) { window.event.returnValue = false; } obj.onpaste=function(){ return false; } }</script><input type="text" style="ime-mode: disabled;" onkeypress="InputNumber(this);" /> <input type="text" style="ime-mode: disabled;" onkeyup="if(isNaN(value) execCommand('undo');" onafterpaste="if(isNaN(value) execCommand('undo');"/> <textarea name="aa" onkeyup="this.value=this.value.replace(/\D/g,'')"></textarea>这样就可以啦,试试吧 我根据各位网友的代码,综合了一个function。这个funciton,可以使用光标键、删除键和倒格键和小数点。但还是有点瑕疵,就是输入第二个小数点的时候,不能正确判断是前面还是后面的小数点。不知道哪位知道,怎么可以判断所在的那个字符串的位置?<html><script>function valiNum2(code,dot,obj){ //dot,如果可以使用小数点,则为“.”,否则为空 if (code==8||code==9||code==46||(code>32&&code<41)) return true; if (code>47&&code<58) return true; //var ch=String.fromCharCode(code); 因为考虑到粘贴的操作,所以不能用字符输入来判断 var v=obj.value; //alert(v+", "+isNaN(v)); if (dot=="."&&code==190) if (isNaN(v)){ //execCommand('undo');不知道为何,放这里没有反应 obj.value=v.replace(".",""); return; }else return true; obj.value=v.replace(/\D/g,'');}</script></head><body><input onkeyup="return(valiNum2(event.keyCode,'.',this))"></body></html> 漏了一些东西,代码里面漏了<head>;另外,我想问的问题是,在onkeyup的情况下,怎么判断光标所在的那个字符串的位置,也就是说,刚刚输入的那个小数点,是否是第二个小数点,如果是的话,把这个小数点去掉;或者用execCommand('undo')来撤销操作。如果没有办法判断第二个小数点的话,就只能加多一个onkeydown事件来拦截了。 请教一个正则:匹配含有某个字符串的<div>标签 为甚麽下面2段js执行结果不一样? 无数据报错,有数据正常 EXT问题 大家帮帮忙了 调用几次?怎样调用 才能弹出ddd??? 如何取得页面中图片的坐标,然后把某个层定位到该坐标的某一相对位置? 在线等待 急,怎样引用函数的参数?请大家帮忙! extjs line chart 显示出问题。 js怎么把添加的一整行数据设置为只读 javascript怎么弹出“类似于模式对话框”的登录窗口,要求没有关闭按钮 一个简单的逻辑或问题
if (str=="")
str="0123456789";
if (str==".")
str="0123456789.";
var ch=String.fromCharCode(code);
if ((str.indexOf(ch)==-1)
||(str=="0123456789."&&isNaN(obj.value+ch))){
//因为要避免重复输入小数点,所以要加这个判断
alert("输入的字符不符合要求,请重新输入!"+ch);
obj.focus();
return false;
}
obj.focus();
return true;
}调用的文本框:
<input type=text onkeypress="return(valiNum(event.keyCode, '',this))">
如允许输入小数点的:
<input type=text onkeypress="return(valiNum(event.keyCode, '.',this))">
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>测试onkey事件</title>
<script>
function test(obj0,code, obj1){
obj1.value+=code+"\n";
if (obj0.value.length>10&&code!=8&&code!=46
&&code!=37&&code!=39)
return false;
}
function valiNum(obj0,code,obj1,dot){
obj1.value+=code+"\n";
if (code==8||code==9||code==46||(code>32&&code<41))
return true;
if (obj0.value.length>10)
return false;
if (code>47&&code<58)
return true;
if (dot=="."&&code==190)
if (isNaN(obj0.value+"."))
return false;
else
return true;
return false;
}
</script>
</head><body>
<table border="1" width="80%" id="table1" height="231"><tbody align=center>
<tr>
<td colspan="2" height="31">onkeypress事件</td>
<td colspan="2" height="31">onkeydown事件</td>
<td colspan="2" height="31">onkeyup事件</td>
<td colspan="2" height="31">校验数字</td>
</tr><tr>
<td>按键key</td><td>键值keyCode</td>
<td>按键key</td><td>键值keyCode</td>
<td>按键key</td><td>键值keyCode</td>
<td>按键key</td><td>键值keyCode</td>
</tr><tr>
<td><textarea cols=8 rows=13 onkeypress="return(test(this,event.keyCode, b))"></textarea></td>
<td><textarea cols=8 rows=13 id=b></textarea></td>
<td><textarea cols=8 rows=13 onkeydown="return(test(this,event.keyCode, d))"></textarea></td>
<td><textarea cols=8 rows=13 id=d></textarea></td>
<td><textarea cols=8 rows=13 onkeyup="return(test(this,event.keyCode, f))"></textarea></td>
<td><textarea cols=8 rows=13 id=f></textarea></td>
<td><textarea cols=8 rows=13 onkeydown="return(valiNum(this,event.keyCode, g,'.'))"></textarea></td>
<td><textarea cols=8 rows=13 id=g></textarea></td>
</tr></tbody>
</table>
</body></html>
我还是倾向搞一个临时变量,在valuechange时用isNaN()来判断控件的value,如果不对,就把临时变量整回去
如果不让显示错误的输入,keyup时判断也可以
还有keyup是不能发辉作用的,例如如果你长按一个键,例如是“A的”的话,就会出来很多个A字母的。另外,可以在要输入的textarea里面增加一个 onpaste="return(false)" 属性,就能防止所有粘贴行为了。
//只能输入数字
function InputNumber(obj) {
if (event.keyCode < 48 || event.keyCode > 57) {
window.event.returnValue = false;
}
obj.onpaste=function(){
return false;
}
}
</script>
<input type="text" style="ime-mode: disabled;" onkeypress="InputNumber(this);" />
<input type="text" style="ime-mode: disabled;" onkeyup="if(isNaN(value) execCommand('undo');" onafterpaste="if(isNaN(value) execCommand('undo');"/>
这样就可以啦,试试吧
这个funciton,可以使用光标键、删除键和倒格键和小数点。但还是有点瑕疵,就是输入第二个小数点的时候,不能正确判断是前面还是后面的小数点。不知道哪位知道,怎么可以判断所在的那个字符串的位置?<html>
<script>
function valiNum2(code,dot,obj){
//dot,如果可以使用小数点,则为“.”,否则为空
if (code==8||code==9||code==46||(code>32&&code<41))
return true;
if (code>47&&code<58)
return true;
//var ch=String.fromCharCode(code); 因为考虑到粘贴的操作,所以不能用字符输入来判断
var v=obj.value;
//alert(v+", "+isNaN(v));
if (dot=="."&&code==190)
if (isNaN(v)){
//execCommand('undo');不知道为何,放这里没有反应
obj.value=v.replace(".","");
return;
}else
return true;
obj.value=v.replace(/\D/g,'');
}
</script>
</head><body><input onkeyup="return(valiNum2(event.keyCode,'.',this))">
</body></html>
另外,我想问的问题是,在onkeyup的情况下,怎么判断光标所在的那个字符串的位置,也就是说,刚刚输入的那个小数点,是否是第二个小数点,如果是的话,把这个小数点去掉;或者用execCommand('undo')来撤销操作。
如果没有办法判断第二个小数点的话,就只能加多一个onkeydown事件来拦截了。