一个基于jquery的文本框记数器


Posted in Javascript onSeptember 19, 2012
/* 
*长度跟踪器 
*v2.1.0 
*bind2Id:用于显示长度变化的元素的id 
*max:最大长度 
*msgWrap:提示信息(必须要有一个"-"占位符) 
*eg:$('#input').lenTracer({bind2Id:'myTracer',max:150,msgWrap:'您还可以输入-个字符'}); 
*author:liujg1015@gmail.com 
*/ 
(function ($) { 
var zw_validate = function (el, option) { 
this.el = $(el); 
this.bindEl = false; 
this.setting = { 
bind2Id: false, 
max: 100, 
msgWrap: '您还可以输入-个字符' 
}; 
if (option) { 
$.extend(this.setting, option); 
this.init(); 
} 
}; 
zw_validate.prototype = { 
init: function () { 
var _this = this; 
this.bindEl = $('#' + this.setting.bind2Id); 
this.el.focus(function () { _this.start(); }).blur(function () { _this.dispose(); }); 
this.el.css({ paddingBottom: 20 }); 
this.initMsg(); 
}, 
initMsg: function () { 
var wrap = this.setting.msgWrap.split('-'); 
this.bindEl.text(this.setting.max - this.count().total).before(wrap[0]).after(wrap[1]); 
}, 
count: function () { 
var _val = this.el.val(); 
var _len = _val.length; 
var _rowCount = 0; 
var _enterLen = 0; 
var _partten = /\n+/g; 
if (_len > 0 && _partten.test(_val)) { 
_enterLen += 3; 
while ((result = _partten.exec(_val)) != null) { 
if ((result.index + 1 + _enterLen) > this.setting.max) { 
break; 
} 
_enterLen += 3; 
} 
_rowCount = _val.match(_partten).length; 
} 
return { total: (_len + _rowCount * 3), enterLen: _enterLen }; 
}, 
start: function () { 
var _this = this; 
_this.timer = setInterval(function () { 
var _val = _this.el.val(); 
var _rlt = _this.count(); 
if (_rlt.total > _this.setting.max) { 
if (_rlt.enterLen > 0) { 
_this.el.val(_val.substr(0, _this.setting.max - _rlt.enterLen)); 
} 
else { 
_this.el.val(_val.substr(0, _this.setting.max)); 
} 
_this.bindEl.text(_this.setting.max - _this.count().total); 
return; 
} 
_this.bindEl.text(_this.setting.max - _rlt.total); 
}, 300); 
}, 
dispose: function () { 
clearInterval(this.timer); 
}, 
restore: function () { 
this.bindEl.text(this.setting.max - this.el.val().length); 
} 
}; 
$.fn.extend({ 
lenTracer: function (option) { 
return new zw_validate(this, option); 
} 
}); 
})(jQuery);

一、上面是计数器的脚本,可将脚本贴到js文件中,然后在html里面添加引用。
<html> 
<head> 
<title>demo</title> 
</head> 
<body> 
<table> 
<tr> 
<td> 
标题 
</td> 
<td> 
<input type="text" id="title" /> 
<span id="titlelen"></span> 
</td> 
</tr> 
<tr> 
<td> 
评论 
</td> 
<td> 
<textarea cols="5" rows="5" id="comment"></textarea> 
<span id="commentlen"></span> 
</td> 
</tr> 
</table> 
<script src="../scripts/jquery.js" type="text/javascript"></script> 
<script src="../scripts/lentracer.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
$('#title).lenTracer({ bind2Id: titlelen, max: 50}); 
$('#comment).lenTracer({ bind2Id: commentlen, max: 200, msgWrap: '剩余-字' }); 
}); 
</script> 
</body> 
</html>

二、上面的代码是展示如何使用。
这个计数器是自己用jQuery写的,因此要依赖于jQuery库函数。能计算回车符,因为在textarea里面的回车符提交到后台后是'\r\n'。欢迎批评、指正。
Javascript 相关文章推荐
jQuery AJAX 调用WebService实现代码
Mar 24 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
jquery统计用户选中的复选框的个数
Jun 06 Javascript
js改变透明度实现轮播图的算法
Aug 24 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
Oct 26 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
Dec 02 Javascript
js判断手机号是否正确并返回的实现代码
Jan 17 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
canvas实现探照灯效果
Feb 07 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
JS设计模式之访问者模式定义与用法分析
Feb 05 Javascript
Vue element-ui父组件控制子组件的表单校验操作
Jul 17 Javascript
html中的input标签的checked属性jquery判断代码
Sep 19 #Javascript
基于jquery打造的百分比动态色彩条插件
Sep 19 #Javascript
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 #Javascript
基于JQuery的多标签实现代码
Sep 19 #Javascript
一样的table?不一样的table(可编辑状态table)
Sep 19 #Javascript
jQuery学习笔记 获取jQuery对象
Sep 19 #Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 #Javascript
You might like
mysql时区问题
2008/03/26 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python程序需要编译吗
2020/06/19 Python
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
费用会计岗位职责
2014/01/01 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
九年级英语教学反思
2016/02/15 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server