一个基于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 Title、alt提示(Tips)实现源码解读
Dec 12 Javascript
js/html光标定位的实现代码
Sep 23 Javascript
jquery加载图片时以淡入方式显示的方法
Jan 14 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 Javascript
在JavaScript中如何解决用execCommand(
Oct 19 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
解决vue+webpack打包路径的问题
Mar 06 Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 Javascript
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 Javascript
vue3.0中setup使用(两种用法)
Dec 02 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函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
Javascript 写的简单进度条控件
2008/01/22 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
vue--vuex详解
2019/04/15 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
详解Python中类的定义与使用
2017/04/11 Python
python微信公众号开发简单流程
2018/03/23 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
西门豹教学反思
2014/02/04 职场文书
国庆节标语大全
2014/10/08 职场文书
学校2014年度工作总结
2014/12/06 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
队名及霸气口号大全
2015/12/25 职场文书
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
Apache自带的ab压力测试工具的实现
2022/07/23 Servers