一个基于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 相关文章推荐
预加载css或javascript的js代码
Apr 23 Javascript
按给定几率进行随机抽取的js代码
Dec 28 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
Apr 28 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
JavaScript:ES2019 的新特性(译)
Aug 08 Javascript
vue路由分文件拆分管理详解
Aug 13 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
Aug 22 Javascript
微信小程序实现签到弹窗动画
Sep 21 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
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
javascript新手语法小结
2008/06/15 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
vue实现浏览器全屏展示功能
2019/11/27 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python使用numpy模块创建数组操作示例
2018/06/20 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python添加菜单图文讲解
2019/06/04 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
服装设计行业个人的自我评价
2013/12/20 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
秘书英文求职信
2014/04/16 职场文书
个人工作主要事迹
2014/05/08 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
邀请书模板
2015/02/02 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
实战Python爬虫爬取酷我音乐
2022/04/11 Python