У меня есть функция jQuery TextAreaExpander, но у меня с ней небольшая проблема.Проблема с jQuery и автоматическим изменением размера textarea
Когда текстовое поле очень велико, удаление текста из нижней части его с помощью кнопок backspace или delete приводит к тому, что фокус перемещается в верхнюю часть текстового поля, и поэтому курсор перемещается с экрана. Это очень затрудняет редактирование больших разделов текста.
Как получить эту функцию для автоматического изменения размера текстового поля, но без перескакивания и скрытия курсора в этой ситуации?
(function($) {
// jQuery plugin definition
$.fn.TextAreaExpander = function(minHeight, maxHeight) {
var hCheck = !($.browser.msie || $.browser.opera);
// resize a textarea
function ResizeTextarea(e) {
// event or initialize element?
e = e.target || e;
// find content length and box width
var vlen = e.value.length, ewidth = e.offsetWidth;
if (vlen != e.valLength || ewidth != e.boxWidth) {
if (hCheck && (vlen < e.valLength || ewidth != e.boxWidth)) e.style.height = '0px';
var h = Math.max(e.expandMin, Math.min(e.scrollHeight, e.expandMax));
e.style.overflow = (e.scrollHeight > h ? 'auto' : 'hidden');
e.style.height = h + 'px';
e.valLength = vlen;
e.boxWidth = ewidth;
}
return true;
};
// initialize
this.each(function() {
// is a textarea?
if (this.nodeName.toLowerCase() != 'textarea') return;
// set height restrictions
var p = this.className.match(/expand(\d+)\-*(\d+)*/i);
this.expandMin = minHeight || (p ? parseInt('0'+p[1], 10) : 0);
this.expandMax = maxHeight || (p ? parseInt('0'+p[2], 10) : 99999);
// initial resize
ResizeTextarea(this);
// zero vertical padding and add events
if (!this.Initialized) {
this.Initialized = true;
$(this).css('padding-top', 0).css('padding-bottom', 0);
$(this).bind('keyup', ResizeTextarea).bind('focus', ResizeTextarea);
}
});
return this;
};
})(jQuery);
// initialize all expanding textareas
jQuery(document).ready(function() {
jQuery('textarea[class*=expand]').TextAreaExpander();
});
Вы можете увидеть проблему здесь, удаляя текст из самой нижней части текстового поля: http://jsfiddle.net/BmwCe/1/
Спасибо!