jQuery jGrow改进版
终极管理员 知识笔记 29阅读
What is jGrow?
jGrow是一个jQuery插件,它可以根据文本的长度调整文本区域的大小。它在jQuery 1.2.x上运行流畅,在IE6/7、火狐2.0.x和Opera 9.x上进行了测试,目前还没有发现任何bug .非常好一个jQuery插件,但原版不支持Ctrl V的键盘操作事件,直接代码。/* 原版代码. jGrow 0.2 * 08。02 .2008 * 0.2版本: 04。03 .2008 */(函数($){ $。fn。jGrow=function(options){ var opts=$ .extend({},$.fn.jGrow.defaults,options);返回this.each(function() {$(this).css({ overflow: 'hidden' }).bind('keypress 'function(){ $ this=$(this);var o=$ 1000 .meta?$.extend({},opts,$ this。data()): opts;if(o . rows==0(this。滚动高度。客户端高度)){这个。行数=1;} else if((这个。rows=o . rows)(这个。滚动高度。客户端高度)){这个。行数=1;} else if(o.rows!=0 this.rows o.rows) {n bsp; $this.css({ overflow: "auto" });}

$this.html();
});

});
}
$.fn.jGrow.defaults = { rows: 0 };
})(jQuery);
以下为改进后的代码, 支持 Ctrl+V 键盘事件操作
/*
* jGrow 0.2
* 08.02.2008
* 0.2 release: 04.03.2008
*/
// Updated by S.Sams 2008-07-24 21:47 以兼容Ctrl+V的操作
(function($) {
$.fn.jGrow = function(options) {
var opts = $.extend({}, $.fn.jGrow.defaults, options);
return this.each(function() {
var isCtrl = false;
$(this).css({ overflow: "hidden" }).bind("keypress", function() {
$this = $(this);
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
if(o.rows == 0 && (this.scrollHeight > this.clientHeight)) {
this.rows += 1;
} else if((this.rows <= o.rows) && (this.scrollHeight > this.clientHeight)) {
this.rows += 1;
} else if(o.rows != 0 && this.rows > o.rows) {
$this.css({ overflow: "auto" });
}
$this.html();
}).bind("keydown",function(event){
if(event.keyCode == 17) isCtrl = true;
}).bind("keyup",function(event){
if(isCtrl && event.keyCode == 86)
{
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
var getCL = this.value.split('\n').length
if( getCL <= o.rows)
{
this.rows = getCL;
}
else
{
this.rows = o.rows;
$(this).css({ overflow: "auto" });
}
isCtrl = false;
}
});
});
}
$.fn.jGrow.defaults = { rows: 0 };
})(jQuery);
// 自适应 textarea 有内容存在的高度自动调整
/*
* jGrow 0.2
* 08.02.2008
* 0.2 release: 04.03.2008
*/
// Updated by S.Sams 2008-07-24 21:47 以兼容Ctrl+V的操作
(function($) {
$.fn.jGrow = function(options) {
var opts = $.extend({}, $.fn.jGrow.defaults, options);
return this.each(function() {
var isCtrl = false;
$(this).css({ overflow: "hidden" }).bind("keypress", function() {
$this = $(this);
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
if(o.rows == 0 && (this.scrollHeight > this.clientHeight)) {
this.rows += 1;
} else if((this.rows <= o.rows) && (this.scrollHeight > this.clientHeight)) {
this.rows += 1;
} else if(o.rows != 0 && this.rows > o.rows) {
$this.css({ overflow: "auto" });
}
$this.html();
}).bind("keydown",function(event){
if(event.keyCode == 17) isCtrl = true;
}).bind("keyup",function(event){
if(isCtrl && event.keyCode == 86)
{
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
var getCL = this.value.split('\n').length
if( getCL <= o.rows)
{
if(getCL > parseInt(this.rows))
this.rows = getCL;
}
else
{
this.rows = o.rows;
$(this).css({ overflow: "auto" });
}
isCtrl = false;
}
});
// Updated by S.Sams 2008-07-25
// 修正 testarea 有内容存在的情况下的自动调整高度
if($(this).val().length > 0)
{
var o = $.meta ? $.extend({}, opts, $(this).data()) : opts;
var getCL = this.value.split('\n').length
if( getCL <= o.rows)
{
if(getCL > parseInt(this.rows))
this.rows = getCL;
}
else
{
this.rows = o.rows;
$(this).css({ overflow: "auto" });
}
}
});
}
$.fn.jGrow.defaults = { rows: 0 };
})(jQuery);