编辑器加载中..
前台代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jTextCount -- jquery 插件,统计文本框字符串长度</title> <script src="/Js/jquery-1.4.2.min.js" type="text/javascript"></script> <script type="text/javascript" src="/js/jTextCount.js"></script> <link rel="stylesheet" type="text/css" href="/css/jTextCount.css" /> <style type="text/css"> body { font-size: 12px; color: #666; } body, div, span { margin: 0px; padding: 0px; } h1 { font-size: 24px; font-weight: bold; padding: 10px 4px; margin: 10px 0; } #main { width: 500px; margin: 0 auto; } .about { margin-top: 30px; line-height: 2em; } .author { margin-top: 30px; } </style> </head> <body> <div id="main"> <select id="xxoo"> <option value="0">0</option> <option value="1">1</option> </select> <h1> jTextCount字符统计</h1> <div> <textarea id="txa" class="jTextCount-text" name="txa" cols="80" rows="5"></textarea></div> <div class="jTextCount-info"> <input type="button" name="smt" id="smt" value="提交" /> <div class="jTextCount-bar-wrap"> <div id="jcount-bar" class="jTextCount-bar"> </div> </div> <div class="jTextCount-counter-wrap"> 剩余字数 <span id="jcounter" class="jTextCount-counter"></span> </div> </div> </div> <script type="text/javascript"> $('#txa').jTextCount('#jcounter', { max: 140, jCountBarId: '#jcount-bar', callback: function(s) { $('#smt').attr('disabled', !s); } }); </script> </body> </html>
Javascription:
/** * 鉴于没有好的textarea文本框字数统计工具,尤其是不支持中文输入,以及复制粘贴, * 特开发一个,很简单,相信不用加注释了!无视keyup/keypress/change...等事件...(因为不支持中文) * Debian下开发,windows用户请用比较高级的编辑器(editplus/notepad++/vim...)打开,以防乱码 * max参数作为限定用,如果只想显示长度,可不用加此参数,如果想像twitter ( * 国内微博实现的字数显示技术没有twitter牛,总是反应慢一拍 ) 等那样,显示剩余字数,请加参数 * callback函数在文本框内的字符数发生改变时调用,可以用来决定button按钮是否可用等 * * Licensed under The MIT License * * @version 1.0 * @since 2010-11-20 15:47 * @author Jesse <microji@126.com> */ /** * Usage: $('#txa').jTextCount('#jcounter', {max:140, jCountBarId : '#jcount-bar', callback:function(s){ * $('#submitId').attr('disabled', !s) ; * }}); * * @param jCountId 你想动态显示字符数或剩余字符数的标签ID,注意要家#号,如:'#counter' * @param options 一些附加参数 * * Valid options: * --------------------------------------- * max: 大于0的数值 * jCountBarId : 显示一个进度条的id!,注意要加#号,如:'#count-bar' * callback: 回调函数,在文本框内字符长度发生改变时,调用,并传递是否超过max的限定的bool参数! */ $.fn.jTextCount = function(jCountId, options) { var defaults = { max: 0, // define max length for the texarea jCountBarId: '', // use jquery id type ! like '#count-bar' callback: function() { } // callback function ,when length changed }; if (options) { $.extend(defaults, options); }; var editor = this; var counter = $(jCountId); var countBar = defaults.jCountBarId != '' && $(defaults.jCountBarId).length > 0 ? $(defaults.jCountBarId) : null; var timer = null; editor.defaultLength = editor.val().length; // get original length var processChange = function() { var newLength = editor.val().length; if (defaults.max > 0) { var num = defaults.max - newLength; counter.text(num); if (countBar) { var percent = Math.min((100 * newLength / defaults.max).toFixed(1), 100); countBar.width(percent + '%'); } //剩余 if (num >= 0 && num <= 10) { defaults.callback(true); counter.removeClass('jTextCount-error').addClass('jTextCount-warn'); if (countBar) { countBar.removeClass('jTextCount-bar-error').addClass('jTextCount-bar-warn'); } } //超出 else if (num < 0) { counter.removeClass('jTextCount-warn').addClass('jTextCount-error'); if (countBar) { countBar.removeClass('jTextCount-bar-warn').addClass('jTextCount-bar-error'); } defaults.callback(false); } //正常 else { defaults.callback(true); counter.removeClass('jTextCount-warn').removeClass('jTextCount-error'); if (countBar) { countBar.removeClass('jTextCount-bar-warn').removeClass('jTextCount-bar-error'); } } } else { counter.text(newLength); } editor.defaultLength = newLength; }; processChange(); /* editor.bind('input',function(){ var newLength = editor.val().length ; if( newLength != editor.defaultLength ){ processChange(); } }); */ editor.bind('focus', function() { if (!timer) { timer = window.setInterval(function() { var newLength = editor.val().length; if (newLength != editor.defaultLength) { processChange(); } }, 10); } }); editor.bind('blur', function() { window.clearInterval(timer); timer = null; }); };
CSS:
.jTextCount-text{ width:482px; height: 60px; padding: 8px; font-size: 12px; line-height: 20px; border:1px solid #CCC; -moz-border-radius:4px; -webkit-border-radius:4px; border-radius:4px; } .jTextCount-text:focus{ border-color:rgba(82, 168, 236, 0.75); -moz-box-shadow:0 0 8px rgba(82, 168, 236, 0.5); -webkit-box-shadow:0 0 8px rgba(82, 168, 236, 0.5); box-shadow:0 0 8px rgba(82, 168, 236, 0.5); } .jTextCount-info{height: 24px; margin-top: 6px;} .jTextCount-counter-wrap{float:right; margin-right: 12px;} .jTextCount-counter{font-weight: bold;} .jTextCount-bar-wrap{border:1px solid #CCC; height: 16px; width:100px; float: right;} .jTextCount-bar{display: block; height: 16px; background: #4E7826;}/*default color*/ .jTextCount-warn{color:#E38F00;} .jTextCount-error{color:#DA0B0B;} .jTextCount-bar-warn{background-color: #FFFE00;} .jTextCount-bar-error{background-color: #FF2911;}
效果图: