テキストボックス・テキストエリアで入力文字数の最大値・現在値を表示したい。
【本家】
改造元のプラグインはこちら⇒「m5simpleTextCount」
【変更点】
1.jQuery1.10.x以降でも動作するように修正。
2.最大値を分母に表示するように修正。
3.色のデフォルトの値を修正。
4.警告色となる閾値のデフォルトの値を修正。
5.フォーカス時に表示されるようにデフォルトの値を修正。
【使い方】
<input class="countText10" type="text" /> <textarea class="countText200" rows="10"></textarea> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script src="//sites.google.com/site/foolprogrammer/m5simpleTextCount.js?attredirects=0&d=1"></script> <script type="text/javascript"> $('.countText10').m5simpleTextCount({ maxLength: 10 }); $('.countText200').m5simpleTextCount({ maxLength: 200 }); </script>※詳しい使い方は本家を御覧ください。
【サンプル】
【ソースコード】
/** * m5simpleTextCount * * @version 1.0 * @author nori (norimania@gmail.com) * @copyright 5509 (http://5509.me/) * @license The MIT License * @link http://5509.me/log/m5simpletextcount * * Date: 2010-12-05 21:20 */ (function($) { $.fn.m5simpleTextCount = function(options) { var conf = $.extend({ focusDisplay: true, padding: '3px', color: '#3a87ad', atColor: '#b94a48', background: '#d9edf7', atBackground: '#f2dede', fontWeight: 'bold', atFontWeight: 'bold', opacity: .8, alertLength: -1, maxLength: 10 }, options); $(this).each(function() { var target = $(this), targetOffset = target.offset(), border = { rightWidth: parseInt(target.css('borderRightWidth')), bottomWidth: parseInt(target.css('borderBottomWidth')) }, currentCount = getCount(target), count = $('<span class="simpleTextCount"></span>') .css({ padding: conf.padding, display: 'block', position: 'absolute', color: conf.color, background: conf.background, fontWeight: conf.fontWeight, opacity: conf.opacity }) .text(currentCount + '/' + conf.maxLength), pos = {}; countStyle(currentCount, count); $(window).resize(function() { setCountPos(count, getPos(target, count), border) }); $('body').append(count); setCountPos(count, getPos(target, count), border); if ( conf.focusDisplay ) { count.hide(); target .focus(function() { count.stop(true, true).fadeIn(250); }) .blur(function() { count.stop(true, true).fadeOut(250); }); } target.keyup(function() { var currentCount = getCount(target); countStyle(currentCount, count); count.text(currentCount + '/' + conf.maxLength); setCountPos(count, getPos(target, count), border); }); }); function getCount(target) { return conf.maxLength - target.val().length; } function countStyle(currentCount, count) { if ( currentCount < (conf.alertLength + 1) ) { count.css({ color: conf.atColor, background: conf.atBackground, fontWeight: conf.atFontWeight }); } else { count.css({ color: conf.color, background: conf.background, fontWeight: conf.fontWeight }); } } function getPos(target, count) { var targetOffset = target.offset(); return { x: Math.floor(targetOffset.left), y: Math.floor(targetOffset.top), xdash: target.get(0).offsetWidth, ydash: target.get(0).offsetHeight, cx: count.get(0).offsetWidth, cy: count.get(0).offsetHeight } } function setCountPos(count, pos, border) { return count.css({ left: pos.x + pos.xdash - pos.cx - border.rightWidth, top: pos.y + pos.ydash - pos.cy - border.bottomWidth }); } } })(jQuery);
ダウンロード
以上です。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。