一个基于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 相关文章推荐
JavaScript 滚轮事件使用说明
Mar 07 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
Mar 16 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
javascript获取选中的文本的方法代码
Oct 30 Javascript
基于编写jQuery的无缝滚动插件
Aug 02 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
H5手机端多文件上传预览插件
Apr 21 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 Javascript
Vue页面跳转动画效果的实现方法
Sep 23 Javascript
使用vue开发移动端管理后台的注意事项
Mar 07 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
python3实现随机数
2018/06/25 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
非常详细的C#面试题集
2016/07/13 面试题
校长师德师风自我剖析材料
2014/09/29 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
Python实现打乒乓小游戏
2021/09/25 Python
HTML中的表格元素介绍
2022/02/28 HTML / CSS
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸