所以我在下面有标准的textarea自动增长代码,我已将其更改为在输入属性更改上进行绑定以捕获粘贴。
(function($)
{
$.fn.autogrow = function(options)
{
return this.filter('textarea').each(function()
{
var self = this;
var $self = $(self);
var minHeight = $self.height();
var noFlickerPad = $self.hasClass('autogrow-short') ? 0 : parseInt($self.css('lineHeight')) || 0;
var settings = $.extend({
preGrowCallback: null,
postGrowCallback: null
}, options );
var shadow = $('<div></div>').css({
position: 'absolute',
top: -10000,
left: -10000,
width: $self.width(),
fontSize: $self.css('fontSize'),
fontFamily: $self.css('fontFamily'),
fontWeight: $self.css('fontWeight'),
lineHeight: $self.css('lineHeight'),
resize: 'none',
'word-wrap': 'break-word'
}).appendTo(document.body);
$self.bind('input propertychange', function()
{
var times = function(string, number)
{
for (var i=0, r=''; i<number; i++) r += string;
return r;
};
var val = self.value.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\n$/, '<br/> ')
.replace(/\n/g, '<br/>')
.replace(/ {2,}/g, function(space){ return times(' ', space.length - 1) + ' ' });
// Did enter get pressed? Resize in this keydown event so that the flicker doesn't occur.
if (event && event.data && event.data.event === 'keydown' && event.keyCode === 13) {
val += '<br />';
}
shadow.css('width', $self.width());
shadow.html(val + (noFlickerPad === 0 ? '...' : '')); // Append '...' to resize pre-emptively.
var newHeight=Math.max(shadow.height() + noFlickerPad, minHeight);
if(settings.preGrowCallback!=null){
newHeight=settings.preGrowCallback($self,shadow,newHeight,minHeight);
}
$self.height(newHeight);
if(settings.postGrowCallback!=null){
settings.postGrowCallback($self);
}
});
});
};
})(jQuery);
我一直试图让初始化时的textarea与文本一样高。我见过人们使用各种各样的东西,例如
$(this).height(0).height(this.scrollHeight);
这不起作用。另一件事情是我向textarea模仿了一个keydown事件,它将textarea扩展到了某些地方,然而它最终会在文本之后留下很多空白而且太大了。
有关如何确保textarea适合文本甚至初始化的任何建议?感谢。
答案 0 :(得分:0)
这是一个正常运作的代码: -
(function($)
{
$.fn.autogrow = function(options)
{
return this.filter('textarea').each(function()
{
this.setAttribute('style', 'height:' + (this.scrollHeight) + 'px;overflow-y:hidden;');
}).on('input', function () {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
});
};
})(jQuery);
scrollHeight无法正常工作的问题是textarea位于div区域,在文档就绪时jQuery将其隐藏。这给了一个scrollHeight undefined。
答案是在加载后1秒钟引入一个超时来解决该问题以隐藏div,一旦textareas全部被正确调整大小。
答案 1 :(得分:0)
Abit迟到了派对,但因为它是JQuery
$(document).on("input", "textarea", function()
{
$(this).prop('style').cssText = 'height:auto;';
$(this).prop('style').cssText = 'height:' + $(this).prop('scrollHeight') + 'px';
});
$(document).ready(function ()
{
$('textarea').trigger('input');
});