当你在facebook中键入评论时,评论文本区域会随着你的键入而自动调整大小。如果你点击回车,它会发布评论,如果你点击ctrl+enter,它会在调整大小时转到下一行。
我正在寻找一个javascript/jquery插件来实现同样的功能。
-
当你打字时,可以平滑地调整文本区域的大小,比如facebook,适用于所有新浏览器
-
能够被动态调用,例如,如果通过javascript添加了一个新的文本区域,则可以在该文本区域之后立即调用并将其分配给该文本区域。
-
有一个选项/功能可以忽略回车,并调用回调函数来发布用户在点击回车时键入的内容。
-
当按下ctrl+enter时,有一个选项/功能要推到新行。
有什么建议吗?
我不知道是否已经存在这样的插件,但如果你找不到,你可以自己制作。我很快就想出了这个,也许你可以把它作为一个开始模板(它绝不是完美的,也不是你需要的一切):
http://jsfiddle.net/NfWAn/
<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>
(function($) {
$.fn.smartText = function(options) {
var $this = $(this);
var defaults = {
size_interval : 15
};
var settings = $.extend({}, defaults, options);
$('body').append('<div id="checkValHeight" style="display:none; word-wrap:break-word"></div>');
var checkValHeight = $('#checkValHeight');
$this.each(function() {
$this.addClass('smartText');
});
$('textarea.smartText').live('keyup paste', function() {
var $this = $(this);
var cur_height = $this.height();
checkValHeight
.css({
'width': $this.width()
})
.html($this.val());
if(checkValHeight.height() > cur_height) {
$this.css({
'height': (cur_height + settings.size_interval) + 'px'
});
}
checkValHeight.empty();
});
return $this;
}
})(jQuery);
</script>
<script>
$(function() {
$('textarea').smartText({
size_interval: 30
});
$('#addTextArea').click(function() {
$('body').append('<textarea class="smartText"></textarea>');
return false;
});
});
</script>
</head>
<body>
<a href="#" id="addTextArea">Add Textarea [+]</a><br />
<textarea></textarea>
<textarea></textarea>
</body>
</html>