已知BUG: Ubuntu系统下, onkeyup事件失效,详见: Ubuntu系统下onkeyup/onkeydown对中文输入失效bug. 查看演示: 点此查看DEMO 核心代码: 复制代码 代码如下: //原生JavaScript版本 window.onload=function(){ var js=document.getElementById('js');//获取文本域 var info=document.getElementsByTagName('p')[0];//获取要插入提示信息的元素 var submit=info.getElementsByTagName('input')[0];//获取提交按钮 var max=js.getAttribute('maxlength');//获取限制输入的最大长度 var tips=document.createElement('span');//新建一个提示span var val,cur,count,warn; submit.disabled=true;//默认不可提交 tips.innerHTML='你还可以输入<em>'+max+'</em>个字符<font>[不区分中英文字符数]</font>'; if(max){ js.onkeyup=js.onchange=function(){ submit.disabled=false; if(info.lastChild.nodeName!='SPAN') info.appendChild(tips);//避免每次弹起都会插入一条提示信息 count=info.getElementsByTagName('em')[0];//根据输入数字变换区 warn=info.getElementsByTagName('font')[0];//副标题 val=this.value; cur=val.length; // for(var i=0;i<val.length; i++){//此循环是用来判断中英文字符的,但并不建议那样做 // if(val.charCodeAt(i)>255) cur+=1; // } if(cur==0){ //当默认值长度为0时,可输入数为默认maxlength值,此时不可提交 count.innerHTML = max; submit.disabled=true; warn.innerHTML='不区分中英文字符数'; }else if (cur < max) {//当默认值小于限制数时,可输入数为max-cur count.innerHTML = max - cur; warn.innerHTML='不区分中英文字符数'; }else{ count.innerHTML = 0;//当默认值大于等于限制数时,插入一条提示信息并截取限制数内的值 warn.innerHTML='不可再输入!'; this.value=val.substring(0,max);//此处前面的this.value不能用变量val,它们不再是同一个值 } } } } //基于jQuery版本 $(function(){ var _area=$('textarea#jq'); var _info=_area.next(); var _submit=_info.find(':submit'); var _max=_area.attr('maxlength'); var _val,_cur,_count,_warn; _submit.attr('disabled',true); _area.bind('keyup change',function(){ //绑定keyup和change事件 _submit.attr('disabled',false); if(_info.find('span').size()<1){//避免每次弹起都会插入一条提示信息 _info.append('<span>你还可以输入<em>'+ _max +'</em>个字符<font>[不区分中英文字符数]</font></span>'); } _val=$(this).val(); _cur=_val.length; _count=_info.find('em'); _warn=_info.find('font'); if(_cur==0){//当默认值长度为0时,可输入数为默认maxlength值,此时不可提交 _count.text(_max); _submit.attr('disabled',true); }else if(_cur<_max){//当默认值小于限制数时,可输入数为max-cur _count.text(_max-_cur); _warn.text('不区分中英文字符数'); }else{//当默认值大于等于限制数时,插入一条提示信息并截取限制数内的值 _count.text(0); _warn.text('不可再输入!'); $(this).val(_val.substring(0,_max)); } }); }); 在线测试代码:
限制字符输入数功能(jQ版和原生JS版)@Mr.Think
/*reset css*/
body{font-size:0.8em;letter-spacing:1px;font-family:"Microsoft YaHei"; line-height:1.8em}
div,h2,p,fieldset,legend,form,textarea,span,em,sub{margin:0;padding:0}
input{font:12px/1.5 tahoma,arial,sans-serif; vertical-align:middle;}
h1{font-size:1em; font-weight:normal;}
h1 a{background:#047; padding:2px 3px; color:#fff; text-decoration:none;}
h1 a:hover{background:#a40000; color:#fff; text-decoration:underline}
h3{color:#888; font-weight:bold;font-size:1em; margin:1em auto; position:relative}
/*demo css*/
fieldset{border:1px solid #ccc;width:720px}
fieldset legend{ background:#a40000; color:#fff;text-align:center; padding:0 8px; margin-left:25px}
fieldset form{background:#eee; border:1px solid #ccc;margin:10px; padding:10px 10px 0}
fieldset form textarea{width:670px; height:60px; border:1px solid #ccc; line-height:25px; padding:3px;overflow:hidden;}
fieldset form textarea:focus{border:1px solid #a40000}
fieldset form p{height:30px; margin:2px 0;*margin:3px 0 3px -5px}
fieldset form p span{padding-left:8px}
fieldset form p span em{font-style:normal; font-weight:bolder; color:#047; padding:0 3px}
fieldset form p span font{color:blue; font-size:10px}
Mr.Think的个人博客
@专注前端技术,热爱PHP,崇尚简单生活.
返回文章页:限制字符输入数功能(jQ版和原生JS版)@Mr.Think
原生JavaScript版本
» 我是用来隔行的,别理我^-^
基于jQuery版本
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
推荐阅读
javascript循环变量注册dom事件 之强大的闭包
今天遇到了这个问题: 复制代码 代码如下: //伪代码 for (var i=0; i<n; i++) { addEvent(obj[i], "click", func(i)); } 结果出现了问题,所有的dom都被注册了 i=n 的时候的事件,查了一些资料,说是在循环过程过>>>详细阅读
本文标题:限制字符输入数功能(jquery版和原生JS版)
地址:http://www.17bianji.com/kaifa2/JS/25738.html
1/2 1