一个基于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 delete 属性的使用
Oct 08 Javascript
JavaScript面向对象程序设计三 原型模式(上)
Dec 21 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
常用的JavaScript模板引擎介绍
Feb 28 Javascript
JavaScript获得页面base标签中url的方法
Apr 03 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
Apr 26 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
Sep 06 Javascript
vue interceptor 使用教程实例详解
Sep 13 Javascript
详解搭建es6+devServer简单开发环境
Sep 25 Javascript
layui的面包屑或者表单不显示的解决方法
Sep 05 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
第十二节--类的自动加载
2006/11/16 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
JS实现分页导航效果
2020/02/19 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python计算圆周率pi的方法
2015/07/11 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
举例讲解Python常用模块
2019/03/08 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
Pytorch 实现权重初始化
2019/12/31 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
大学学习生活感言
2014/01/18 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js