限制字符输入数功能(jQ版和原生JS版)

比较常用的限制字符输入数功能(比如热火超天的微博输入框),用jQuery和原生JavaScript分别写了一个.原生JavaScript注释中有区分中英文字符的函数, 但个人并不建议这么做.
已知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;i255) 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));
		}
	});
});
共有 12 条评论.

发表评论3,354 Views

  1. 好是好。就是不好调用。JQ版的。
    我这个应该怎么用啊?

    [回复]

    Mr.Think 回复:

    @戏子, 请参见样例演示.

    [回复]

  2. 我想知道网页代码怎样写,谢谢!

    [回复]

    Mr.Think 回复:

    @没木, 不明白你的意思. 如果是想学习网页制作, 请自行Google.

    [回复]

  3. **主题下载

    不错的文章

    [回复]

  4. 这个功能很实用啊,为什么不集成到博客里呢,呵呵

    [回复]

    Mr.Think 回复:

    @电脑知识收藏夹, 博客集成到哪儿? 评论框? 没那个必要.

    [回复]

  5. 如果用鼠标复制粘贴字数会超过限制,当然失去焦点时会自动截掉。目前很多人用定时检查的方法来做,效率是低了点。

    [回复]

    Mr.Think 回复:

    @lzw, 粘贴进来后会触发change事件,如果超出长度就会自动截断.

    [回复]

  6. 我喜欢你的博客,为何以前没发现呢?JS方面,以后得多向你请教啊!

    [回复]

    Mr.Think 回复:

    @ZH CEXO, 互相学习.呵呵.

    [回复]

  7. 博客很漂亮~~~收藏了,欢迎回踩

    [回复]

发表评论[无需注册]