textarea 输入框高度自适应
//css
<style>
.expandingArea{
position:relative;
}
.expandingArea span{
display: block;
padding: 8px 12px;
line-height: 1.42857143;
font-size: 14px;
}
.expandingArea textarea{
position:absolute;
top:0;
left:0;
height:100%;
}
</style>
//html
<div class="expandingArea"><pre style="display:block;visibility:hidden;"><span></span></pre><textarea rows="1" style="position:absolute;top:0;left:0;height:100%;" class="form-control money-input remark" <?=$action != 'edit'?'disabled': '' ?> ><%=d[i].remark%></textarea></div>
//js
$(function () {
$("#qudao_data").on('keyup change blur', '.money-input.remark', function () {
//编辑框自适应高度
var text = $(this).val()
$(this).parents(".expandingArea").find('pre span').text(text)
})
})jQuery autoResize 插件实现:
/*
* jQuery autoResize (textarea auto-resizer)
* @copyright James Padolsey http://james.padolsey.com
* @version 1.04
*/
(function ($) {
$.fn.autoResize = function (options) {
// Just some abstracted details,
// to make plugin users happy:
var settings = $.extend({
onResize: function () {
},
animate: true,
animateDuration: 150,
animateCallback: function () {
},
extraSpace: 20,
limit: 1000
}, options);
// Only textarea's auto-resize:
this.filter('textarea').each(function () {
// Get rid of scrollbars and disable WebKit resizing:
var textarea = $(this).css({resize: 'none', 'overflow-y': 'hidden'}),
// Cache original height, for use later:
origHeight = textarea.height(),
// Need clone of textarea, hidden off screen:
clone = (function () {
// Properties which may effect space taken up by chracters:
var props = ['height', 'width', 'lineHeight', 'textDecoration', 'letterSpacing'],
propOb = {};
// Create object of styles to apply:
$.each(props, function (i, prop) {
propOb[prop] = textarea.css(prop);
});
// Clone the actual textarea removing unique properties
// and insert before original textarea:
return textarea.clone().removeAttr('id').removeAttr('name').css({
position: 'absolute',
top: 0,
left: -9999
}).css(propOb).attr('tabIndex', '-1').insertBefore(textarea);
})(),
lastScrollTop = null,
updateSize = function () {
// Prepare the clone:
clone.height(0).val($(this).val()).scrollTop(10000);
// Find the height of text:
var scrollTop = Math.max(clone.scrollTop(), origHeight) + settings.extraSpace,
toChange = $(this).add(clone);
// Don't do anything if scrollTip hasen't changed:
if (lastScrollTop === scrollTop) {
return;
}
lastScrollTop = scrollTop;
// Check for limit:
if (scrollTop >= settings.limit) {
$(this).css('overflow-y', '');
return;
}
// Fire off callback:
settings.onResize.call(this);
// Either animate or directly apply height:
settings.animate && textarea.css('display') === 'block' ?
toChange.stop().animate({height: scrollTop}, settings.animateDuration, settings.animateCallback)
: toChange.height(scrollTop);
};
// Bind namespaced handlers to appropriate events:
textarea
.unbind('.dynSiz')
.bind('keyup.dynSiz', updateSize)
.bind('keydown.dynSiz', updateSize)
.bind('change.dynSiz', updateSize);
});
// Chain:
return this;
};
})(jQuery);版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/522.html
转载时须注明出处及本声明