如何制作扩展文本框?

时间:2010-05-27 20:30:41

标签: javascript html css

我想制作一本教科书,它以一个给定的宽度/高度开始。然后,如果用户输入的空间超过给定的空间量,则文本框会向下扩展。我该怎么做呢?我使用CSS吗? 当用户传递允许的行数时,基本文本框只显示滚动条。如何使文本框再扩展5行呢?

<form method="post" action="">
<textarea name="comments" cols="50" rows="5"></textarea><br>
<input type="submit" value="Submit" />
</form>

我如何使用Robert Harvey提到的例子?我之前从未使用过JavaScript ..

3 个答案:

答案 0 :(得分:5)

jQuery AutoResize插件
http://james.padolsey.com/javascript/jquery-plugin-autoresize/

使用步骤:

你需要jQuery。要将其添加到您的页面:

<script type="text/javascript"
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>

然后,下载插件并将其放在与网页相同的文件夹中。要引用它,请将其添加到您的网页:

<script type="text/javascript"
    src="autoresize.jquery.js"></script>

接下来,在页面中添加一个文本框:

<textarea id="comment" style="width: 400px; padding: 10px; height: 50px; 
    display: block; font-family:Sans-serif; font-size:1.2em;">
    Type something in here, when you get close to the end the box will expand!
</textarea>

最后,在脚本块中,将插件的代码添加到文本框中:

<script type="text/javascript">
    $('textarea#comment').autoResize({
        // On resize:
        onResize : function() {
            $(this).css({opacity:0.8});
        },
        // After resize:
        animateCallback : function() {
            $(this).css({opacity:1});
        },
        // Quite slow animation:
        animateDuration : 300,
        // More extra space:
        extraSpace : 40
    });
</script>

答案 1 :(得分:4)

如果您愿意,可以添加库,或者只是跟踪textarea的scrollTop属性。

如果scrollTop不为零,请添加行。

<!doctype html> 
<html lang= "en"> 
<head> 
<meta charset= "utf-8"> 
<title>Expand textarea </title> 
<style>
textarea{overflow-y:scroll}
</style>
<script>
onload=function(){
    var who=document.getElementsByName('comments')[0];
    who.onkeyup=function(){
        if(who.scrollTop)who.rows=parseInt(who.rows)+5;
    }
}
</script>
</head> 
<body>
<textarea name="comments" cols="50" rows="5"></textarea> 
</body> 
</html> 

答案 2 :(得分:1)

以下my solution仅使用vanilla javascript 经测试适用于Chrome,Firefox和IE8及以上。

在加载时,或在函数中敲击它:

var element = document.getElementById('comments');
var retractsAutomatically = false;

var sizeOfOne = element.clientHeight;
element.rows = 2;
var sizeOfExtra = element.clientHeight - sizeOfOne;
element.rows = 1;

var resize = function() {
    var length = element.scrollHeight;

    if (retractsAutomatically) {
        if (element.clientHeight == length)
            return;
    }
    else {
        element.rows = 1;
        length = element.scrollHeight;
    }

    element.rows = 1 + (length - sizeOfOne) / sizeOfExtra;
};

//modern
if (element.addEventListener)
    element.addEventListener('input', resize, false);
//IE8
else {
    element.attachEvent('onpropertychange', resize)
    retractsAutomaticaly = true;
}

CSS&amp; HTML:

textarea#comments { overflow:hidden; }
<textarea id="comments" cols="50" rows="1"></textarea>