一个基于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 相关文章推荐
ajax与302响应代码测试
Oct 23 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
Aug 29 Javascript
angularjs中的$eval方法详解
Apr 24 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
jquery animate动画持续运动的实例
Nov 29 jQuery
浅析JavaScript异步代码优化
Mar 18 Javascript
vue回到顶部监听滚动事件详解
Aug 02 Javascript
简单了解JavaScript sort方法
Nov 25 Javascript
jQuery操作动画完整实例分析
Jan 10 jQuery
Vue全局事件总线你了解吗
Feb 24 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编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
详解JavaScript函数绑定
2013/08/18 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
django实现分页的方法
2015/05/26 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
在python中求分布函数相关的包实例
2020/04/15 Python
Python用SSH连接到网络设备
2021/02/18 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
Gap工厂店:Gap Factory
2017/11/02 全球购物
社区先进事迹材料
2014/05/19 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
党员个人总结自评
2015/02/14 职场文书
单位考核鉴定意见
2015/06/05 职场文书
安全主题班会教案
2015/08/12 职场文书
趣味运动会口号
2015/12/24 职场文书
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL