博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

微博输入框插件

Posted on 2012-05-25 13:27  无名小站  阅读(1241)  评论(0编辑  收藏  举报
 1 /**
 2  * 微博计数输入框插件
 3  * 属性说明:
 4  * counter 计数区的容器id
 5  * max 最大字符数,默认值为150
 6  * textClass 指定文字的样式
 7  * normalClass 指定未超过最大字数时数字样式
 8  * errorClass 指定已超过最大字数时数字样式
 9  * 2012/3/8 by 崔玥
10  */
11 (function($){
12     $.fn.extend({
13         weiboInputBox: function(options) {    //插件名字
14             var defaults={
15                 counter:"msg",    //计数容器id
16                 max:150,
17                 textClass:"textClass",
18                 normalClass:"normalClass",
19                 errorClass:"errorClass"
20             };
21             var options=$.extend(defaults,options);
22             return this.each(function() {
23                 var o=options;    //得到配置参数
24                 var obj=$(this);    //得到当前对象
25                 $("#"+o.counter).addClass(o.textClass)
26                     .html("您可以输入<span class='"+o.normalClass+"'>"+o.max+"</span>字");
27                 obj.bind("keypress",function(event){
28                     var l=obj.val().length+1;
29                     var maxlength=obj.attr("maxlength");
30                     if(l>maxlength){
31                         window.event.keyCode=0;
32                     }
33                 });
34                 obj.bind("keyup change",function(event){
35                     var val=obj.val();
36                     var vLength=val.length;
37                     //var addLen=(val.match(/[^\x00-\xff]|[\u4E00-\u9FA5]/g)||'').length;    //2个英文字符计为1个
38                     var addLen=val.length;    //1个英文字符计为1个
39                     var num=o.max-Math.ceil((vLength+addLen)/2);
40                     
41                     if(num>=0){
42                         $("#"+o.counter).addClass(o.textClass)
43                             .html("您可以输入<span class='"+o.normalClass+"'>"+num+"</span>字");
44                     }else{
45                         $("#"+o.counter).addClass(o.textClass)
46                             .html("已超过<span class='"+o.errorClass+"'>"+Math.abs(num)+"</span>字");
47                     }
48                 });
49             });
50         }
51     });
52 })(jQuery);

 

自己写了一个类似新浪微博的计字数的输入框,由于IE浏览器的<textarea>标记不支持maxlength属性,所以在插件中使用了press键盘事件,在事件中检查字数,如果超过上限则强制将keyCode置为0,以达到maxlength属性的目的。但是这种方法对复制、粘贴是无能为力的,所以对这种情况还是使用了截取字符串的方式,感觉还是有些缺憾,望大家提供些思路。

调用时,要指定计数区域的一个容器id,比如是一个<div>标记,这样才可以把计数的信息显示出来。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <script src="jquery.js"></script>
  <script src="weibotextbox.js"></script>
  <style type="text/css">
  .normal{font-size:14px;color:#000000;}
  .text{font-size:18px;color:#0000FF;font-family:Garamond;}
  .error{font-size:18px;color:#FF0000;font-family:Garamond;}
  </style>
 </HEAD>
 <BODY>
<div id="counter"></div>
<textarea class="textarea" id="summary" maxlength="20" row="3" col="20">
</textarea>

<script type="text/javascript">
		$(document).ready(function(){
			$("#summary").weiboInputBox({
				counter:"counter",
				max:20,
				textClass:"normal",
				normalClass:"text",
				errorClass:"error"
			});
		});
</script>
</BODY>
</HTML>