一个基于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广告代码
May 30 Javascript
容易被忽略的JS脚本特性
Sep 13 Javascript
jQuery插件scroll实现无缝滚动效果
Apr 27 Javascript
简单理解vue中track-by属性
Oct 26 Javascript
jQuery Validate设置onkeyup验证的实例代码
Dec 09 Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
angularjs 页面自适应高度的方法
Jan 17 Javascript
微信小程序 自定义复选框实现代码实例
Sep 04 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 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
Protoss热键控制
2020/03/14 星际争霸
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
让焦点自动跳转
2006/07/01 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
再论Javascript的类继承
2011/03/05 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
python局部赋值的规则
2013/03/07 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
J2EE模式面试题
2016/10/11 面试题
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
《乡愁》教学反思
2014/02/18 职场文书
房屋租赁意向书
2014/04/01 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏