我需要一个跨浏览器兼容的插件,当内部文本被写入或删除时,textrea会自动增长和缩小。
我尝试了Elastic插件和Padolsey autoresize插件。两者都在Firefox 3.6中失败。
答案 0 :(得分:7)
我一直在使用以下代码段:Autogrow script @ Javascript Bindings for the Google AppEngine Data Store Project on Google Code
万一URL可能已关闭或删除,请输入以下代码:
(function($) {
/*
* Auto-growing textareas; technique ripped from Facebook
*/
$.fn.autogrow = function(options) {
this.filter('textarea').each(function() {
var $this = $(this),
minHeight = $this.height(),
lineHeight = $this.css('lineHeight');
var shadow = $('<div></div>').css({
position: 'absolute',
top: -10000,
left: -10000,
width: $(this).width() - parseInt($this.css('paddingLeft')) - parseInt($this.css('paddingRight')),
fontSize: $this.css('fontSize'),
fontFamily: $this.css('fontFamily'),
lineHeight: $this.css('lineHeight'),
resize: 'none'
}).appendTo(document.body);
var update = function() {
var times = function(string, number) {
for (var i = 0, r = ''; i < number; i ++) r += string;
return r;
};
var val = this.value.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&')
.replace(/\n$/, '<br/> ')
.replace(/\n/g, '<br/>')
.replace(/ {2,}/g, function(space) { return times(' ', space.length -1) + ' ' });
shadow.html(val);
$(this).css('height', Math.max(shadow.height() + 20, minHeight));
}
$(this).change(update).keyup(update).keydown(update);
update.apply(this);
});
return this;
} })(jQuery);
要使用,只需在想要自动增长的textareas上调用它。
示例:
$('textarea').autogrow();
答案 1 :(得分:2)
jQuery expandable -
一个jQuery插件,可以自动扩展textareas以适应用户输入的内容
这是另一个伟大的textarea自动增长插件,与@Lashae发布的方法相同,但没有额外的功能,如动画。
答案 2 :(得分:1)
在1.6+中你不再需要一个插件来实现这一点,只需将一个改变事件绑定到这个函数,你的textareas就会慷慨地扩展:
function form_autosize(this_element){
//Catch the current scroll position to stop it from jumping about in some browsers
this_scroll = $(window).scrollTop();
//Clear any existing height settings
$(this_element).css('height', '');
//Set the textarea to scroll so that you can capture its height
$(this_element).css('overflow', 'scroll');
//Set the element height to the current scroll height
$(this_element).height($(this_element).prop('scrollHeight'));
//Hide the scrollbars
$(this_element).css('overflow', 'hidden');
//Re-apply the scroll position
$(window).scrollTop(this_scroll);
这似乎在Chrome,Opera,Firefox和Safari的最新版本中运行良好。尚未尝试过Internet Explorer或旧版本。
合适的变更事件可能是:
$(this_element).on('keyup change paste', function() { form_autosize(this_element) });
答案 3 :(得分:0)
这是一个基于上述代码段的插件,但修复了IE&lt; = 8问题,并且还支持textareas的水平增长。
答案 4 :(得分:0)
我在jQuery中使用了这个方法。
setInterval(function(){
$(name_textarea).css('height', $(name_textarea)[0].scrollHeight+2+'px')
},100);
尝试一下,你可以在scrollHeight后面使用de number来获得最佳效果。
答案 5 :(得分:0)
我刚刚为它编写了一个angular指令(没有jQuery依赖), 看看:angular-autogrow directive(GitHub)