不积跬步无以至千里----高度自适应的textarea

在某个项目里面,有这样的一个小需求。

textarea的高度自适应,当高度高于300px之后,textarea高度不再增高,出滚动条。当高度小于某个高度例如80px的时候,高度不再变小。

其实这个需求在很多地方都有出现过,例如微博的评论框,还有各种评论框。

谈不上什么有难度的技术,写下来当一个小插件积累。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>高度自适应的textarea</title>
<link rel='stylesheet' type='text/css' href='http://static.100.com/css/base.css?v=201404251401' />
<style>
.mod-solution{ padding:16px 21px 21px 21px; overflow:hidden;zoom:1; width:648px; margin:0 auto;}
.mod-solution .mhd h2{ font-size:24px; color:#535353; font-family:"Arial"; font-weight:normal;}
.so-count{ text-align:right; line-height:30px;}
.so-count em{ color:#ff8b50;}
.mod-solution .mbd{ overflow:hidden;zoom:1; padding-bottom:13px;}
.mod-solution .mft{ text-align:right;}
.mod-solution textarea,.copyCode{ width:626px; height:89px; overflow:hidden; border:1px solid #95c779; padding:5px 10px;}
.copyCode{ display:none; height:auto; min-height:89px;word-wrap: break-word;
word-break: normal;}
.mod-solution .greenBtn{ display:inline-block; padding: 0 14px; color:#fff; font-size:14px; height:32px; line-height:32px; background-color:#63c15f; text-decoration:none;}
.unPlBtn{  background-color: #eeeeee;
  color: #b4b4b4;
  display: inline-block;
  padding: 5px 15px;
  margin: 0;}
  .plBtn {
  display: none;
  background: #63c15f;
  color: #fff;
  padding: 5px 15px;
}

</style>
</head>

<body>
<div class="mod-solution">
	<div class="mhd">
    	<h2>My Answer:</h2>
    </div>
    <div class="mbd">
    	<p class="so-count">单词统计:<em>0</em></p>
        <div>
        	<textarea></textarea>
            <div class="copyCode"></div>
        </div>
    </div>
    <div class="mft"><a href="javascript:void(0)" class="plBtn">提交答案</a><span class="unPlBtn">提交答案</span></div>
</div>
<script type="text/javascript" src="http://static.100.com/js/jquery/1.8.3/jquery.js?v=201404251401"></script>
<script type="text/javascript">
var cbox={
	init:function(){
		cbox.keyUpBind();
	},
	Bcount:function(str){ //计算单词数
		var i=0,j=0,c=0;
		var t=/[a-zA-Z]|([+-]?)\d*\.?\d+/;
		var bo=false;
		for(i=0,j=i+1;j<=str.length;i=j++){
			if(t.test(str.substring(i,j))&&!bo){
				bo=true;c++;
			}else if(!t.test(str.substring(i,j))){
				bo=false;
			}
		}
		return c;
	},
	keyUpBind:function(){ //输入框key事件的绑定
		$('.mod-solution textarea').live('keyup',function(){
			var num=cbox.Bcount($(this).val()),height=$(this).height();
			//if ($(this).val().match(/[\u4e00-\u9fa5]+/)) {
				//alert('请不要不要输入中文哦,亲。');
				//return;
			//}
			if(num>600){
				alert('单词数不能超过600个。');
				return;
			}
			if($(this).val()!=''){
				$('.unPlBtn').hide();
				$('.plBtn').css('display','inline-block');
			}else{
				$('.unPlBtn').css('display','inline-block');
				$('.plBtn').hide();
			}
			$('.so-count em').text(num);
		});
		$('.mod-solution textarea').live('focus',function(){
			if($(this).val()!=''){
				$('.unPlBtn').hide();
				$('.plBtn').css('display','inline-block');
			}
		})
		$('.mod-solution textarea').live('blur',function(){
			if($(this).val()==''){
				$('.unPlBtn').css('display','inline-block');
				$('.plBtn').hide();
			}
		});
		cbox.autoTextarea({
				'maxHeight':300,
				'obj':'textarea'
			});
	},
	/*文本域输入文字时
	 *文字行数超过文本域高度的时候自动加高文本域高度
	 *到达最大高度的时候出现滚动条
	 *蛋疼的功能
	 */
	autoTextarea:function(mySet){
		var defaults={
			minHeight:$(mySet.obj).height()-10
		};
		$(mySet.obj).bind("paste cut keydown keyup focus blur",function(){

			var opts = $.extend({},defaults,mySet);

			//$(this).height((defaults.minHeight) + 'px');
			var height,style=this.style;
            this.style.height =  opts.minHeight + 'px';
            if (this.scrollHeight > opts.minHeight) {
                if (opts.maxHeight && this.scrollHeight > opts.maxHeight) {
                    height = opts.maxHeight;
                    style.overflowY = 'scroll';
                } else {
                    height = this.scrollHeight;
                    style.overflowY = 'hidden';
                }
                style.height = height  + 'px';
            }
		});
	}
}

cbox.init();
</script>
</body>
</html>

ps:这个插件可以监听回车键。有空的时候可以copy代码去玩一下。

如果代码不行,请把jQuery.js的链接改成你本地的路径。

Author: Alone

Antroduction: 高级前端开发工程师

Sign: 人生没有失败,只有没到的成功。

不积跬步无以至千里----高度自适应的textarea,布布扣,bubuko.com

时间: 2024-10-10 23:44:22

不积跬步无以至千里----高度自适应的textarea的相关文章

技术成长-不积跬步无以至千里

走在开发的道路上,你会发现越走路越长,越走路上的坑越多.本人是想在成长的道路上多踩一些坑的,踩的坑越多,遇到问题解决速度越快.坑多了,可能自己都记不住了,就需要记一记,有些时候你遇到的坑采用的解决办法并不是最优解,所有需要拿出来跟小伙伴一起分享分享你的经验. 记录到比如印象笔记或者有道云笔记里,或者自己的一个文件夹里,不过,个人经验,记在文件夹后很少有人再去看,还是记在印象笔记或者有道云笔记里,可以帮助自己随时翻看.现在的流程是重要的时候记录在有道云笔记上,做个索引,然后印象笔记记录的是我再找对

不积跬步无以至千里(C语言笔记)

第一章 初始C程序 1.C程序结构 简单来说,一个C程序就是由头文件和函数组成 头文件 一条编译预处理命令:作用是在对C程序进行正式编译之前应该做一些预处理工作 函数 就是实现代码逻辑的一个小的单元. 注:在最新的C标准中,main函数前的类型为int而不是void 2.必不可少之主函数 一个C程序有且只有一个主函数,即main函数 C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入门 main前面的int就是主函数的类型(C程序一定是从主函数开始的) printf()是格式输

不积跬步无以至千里,不积小流无以成江海

更新一下今天的学习进度:以后每天都会更新,倘若有啥感悟想说的话也会一起发出来,希望更多的人能和我一起坚持下去: 1.每天背诵50个英文单词,复习巩固了64个单词,进度:  900/3486 2.<王者归来>两个月内读完,进度:362/1010 3.<梦的解析>读完,开始读<人类简史>,进度:120/452

不积跬步无以至千里

其实注册园子的账号已经5年多了,但是这5年就写了一篇文章,说来自己真的好懒. 这两天突然想把自己学习的历程和工作的点滴留下记录,待日后自己老了可以翻看翻看,想来也会比较有趣 ^^ 今天看到微信朋友圈一个好友的心情,就借鉴他的原文来劝勉自己 一个坏习惯往往是一个舒服的习惯,自然就形成了:而一个好习惯往往是一个不太舒服的习惯,需要刻意的锻炼才能养成. 从今天开始争取每周能写一篇技术博文,现在就开始.

未来两周目标计划---C++ and Disassembly(不积跬步无以至千里,不积小流无以成江海)

1.深入理解C++模板编程 2. 重新仔细查阅C++的编译器多态与运行期多态: 3. 利用反汇编去跟踪代码,深入弄懂程序执行的内部过程: 任务完成程度: 2014.11.12 完成度:%10 一点小收获与小进步: 快速锁定屏幕快捷键:window按键(键盘上的像窗口的那个)+ L: 快速打开Windows运行窗口快捷键:window按键 + R : 

编程心得--不积跬步无以至千里

1. 从来不要试图一下子将所有的事情办好. 我正在介绍的这种方法的关键之处是:它可以让你知道是否你的一个改变不能正常工作或者是使某个地方运行不正常. 2.  当一次做得太多的时候,你会不可避免的遇到错误, 并且你将不得不恢复你所做的一切更改来找出问题到底是出在那儿了. 这是一项非常艰难的 工作,可能会导致你的失望.不过,如果你总是稳步推进, 并且在每一步都可以到达一个可以正常运行的点,你的处境就会稍好一点儿. 3. 人们往往忽略这条建议,创建了一个复杂的规则,最终却不能工作. 几个小时后,他们发

不积跬步无以至千里——LeetCode_771

给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母.字母区分大小写,因此"a"和"A"是不同类型的石头. 示例 1: 输入: J = "aA", S = "aAAbbbb" 输出: 3 示例 2: 输入: J = "z", S = "ZZ"

不积跬步无以至千里——LeetCode 22.括号生成

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()())", "(())()", "()(())", "()()()" ] 原文地址:https://www.cnblogs.com/7long/p/10265818.html

积跬步,聚小流------关于UML类图

UML的存在 类图是使用频率比較高的UML图,它用于描写叙述系统中所含的类以及它们之间的相互关系,帮助人们简化对系统的理解,也是系统分析和设计阶段的重要产物,也是系统编码和測试的重要类型根据. UML的表示方法 它的表示方法也比較简单,分成三层,第一层是类名.第二层是属性,第三层是方法. 而 属性和方法中用到的"+"表示public,"-"表示private,"#"表示protected.以及属性的写法:权限修饰符.属性名(方法名),然后是数据类