一个基于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 相关文章推荐
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
JS实现拖动示例代码
Nov 01 Javascript
jQuery中操控hidden、disable等无值属性的方法
Jan 06 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
JavaScript中this详解
Sep 01 Javascript
js弹出窗口返回值的简单实例
May 28 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
Oct 18 Javascript
详解用Webpack与Babel配置ES6开发环境
Mar 12 Javascript
Javascript中的奇葩知识,你知道吗?
Jan 25 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实现仿Google分页效果的分页函数
2015/07/29 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
PHP实现百度人脸识别
2019/05/06 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
爱护公物标语
2014/06/24 职场文书
婚庆公司计划书
2014/09/15 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
新学期感想
2015/08/10 职场文书
《窃读记》教学反思
2016/02/18 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
python 安全地删除列表元素的方法
2022/03/16 Python
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android