input text输入框的这三个键盘响应事件看似是差不多的,实际上他们的执行事件还是有区别的,经过了半天的各种尝试(这里实际上就是想做一个能将金钱数额利用js转换成为大写的功能),遇到的问题就是每次都是无法在第一次就获取input的value,一开始被迫使用了onblur和onchange。
但是这样用户体验太差了,所以我就测试题目上三种的不同,首先down这个是按下后就相应了,基本上比较适合做游戏的上下左右。
第二种press,这个是按下并松开后相应,这里需要提示,利用这个事件,在最开始获取到的input的值是空,因为数值还没有来得及写入input。
第三种up,这个是相应最好的,也就是松开后,值写入到了input然后执行,也就是我所需要的。
这里分享下js代码,也是网上参考的不过写的真的不错各种情况
引用来自:点击打开链接
- function Chinese(num){
- if(!/^\d*(\.\d*)?$/.test(num))throw(new Error(-1, "Number is wrong!"));
- var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
- var BB = new Array("","拾","佰","仟","萬","億","圆","");
- var CC = new Array("角", "分", "厘");
- var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = "";
- for(var i=a[0].length-1; i>=0; i--){
- switch(k){
- case 0 : re = BB[7] + re; break;
- case 4 : if(!new RegExp("0{4}\\d{"+ (a[0].length-i-1) +"}$").test(a[0]))
- re = BB[4] + re; break;
- case 8 : re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
- }
- if(k%4 == 2 && a[0].charAt(i)=="0" && a[0].charAt(i+2) != "0") re = AA[0] + re;
- if(a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k%4] + re; k++;
- }
- if(a.length>1){
- re += BB[6];
- for(var i=0; i<a[1].length; i++){
- re += AA[a[1].charAt(i)] + CC[i];
- if(i==2) break;
- }
- if(a[1].charAt(0)=="0" && a[1].charAt(1)=="0"){
- re+="元整";
- }
- }else{
- re+="元整";
- }
- return re;
- }
然后我还加入了一些需要的方法:
判断了是否为空。
以上的注释写的很详细了,只要能了解正则表达式就能很好的了解作者是如何实现的。
正则参考:百度百科http://baike.baidu.com/link?url=sB0IGHHFr5SvoCmOmWxfkoTk9UvjLG50WQYv88Lw1SxhR01zWUDvXecWXVrmzHDt
其中需要的知识主要是
jquery
javascript
正则表达式符号含义
其中输入框限制只能输入数字和小数点:
<input οnkeypress="return (/[/d.]/.test(String.fromCharCode(event.keyCode)))" style="ime-mode:Disabled" />
参考来自
不能输入中文
<input type="text" name="textfield" οnkeyup="this.value=this.value.replace(/[^/da-z_]/ig,'');"/>
只能输入 数字和下划线
<input οnkeypress="return (/[/d_]/.test(String.fromCharCode(event.keyCode)))" style="ime-mode:Disabled" />
只能输入 数字和小数点
<input οnkeypress="return (/[/d.]/.test(String.fromCharCode(event.keyCode)))" style="ime-mode:Disabled" />
只允许输入汉字</br>
<input name="username" type="text" οnkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')">
其一,只允许输入数字和小数点。
<input onKeypress="return (/[/d.]/.test(String.fromCharCode(event.keyCode)))" style="ime-mode:Disabled">
其二,判断的更详细一些,甚至22..2这样不算数字也判断得出来
<script>
function check(){
if (isNaN(tt.value))
{alert("非法字符!");
tt.value="";}
}
</script>
<input type="text" name="tt" οnkeyup="check();">
其三,只允许输入整数。其实也完全可以根据第三条来举一反三做一些限制。
<script language=javascript>
function onlyNum()
{
if(!(event.keyCode==46)&&!(event.keyCode==8)&&!(event.keyCode==37)&&!(event.keyCode==39))
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
event.returnValue=false;
}
</script><input οnkeydοwn="onlyNum();" style="ime-mode:Disabled>
结语,其实
style="ime-mode:Disabled
这句是比较实用的。意为关闭输入法。省得有些人开着全角输入数字,结果输入不进去来找你哭天抹泪的,还怪你设计的不好。
只允许输入数字
<input name="username" type="text" οnkeyup="value=this.value.replace(//D+/g,'')">
只允许输入英文字母、数字和下划线(以下二种方法实现)
<input name="username" type="text" style="ime-mode:disabled">
<input name="username" type="text" οnkeyup="value=value.replace(/[^/w/.//]/ig,'')">
只允许输入英文字母、数字和&=@
<input name="username" type="text" οnkeyup="value=value.replace(/[^/w=@&]|_/ig,'')">
只允许输入汉字
<input name="username" type="text" οnkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')">
以上都极为常用,仅供参考