Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调整textarea的大小以适合所有内容_Javascript - Fatal编程技术网

Javascript 调整textarea的大小以适合所有内容

Javascript 调整textarea的大小以适合所有内容,javascript,Javascript,我正在尝试调整文本区域的大小,以尽可能紧密地适应其中的内容。以下是我目前的努力: function resizeTextarea(t) { a = t.value.split('\n'); b = 1; for (x = 0; x < a.length; x++) { c = a[x].length; if (c >= 75) b += Math.ceiling(c/75); } b += a.length; t.rows = b; } 函数resizeTe

我正在尝试调整文本区域的大小,以尽可能紧密地适应其中的内容。以下是我目前的努力:

function resizeTextarea(t) {
a = t.value.split('\n');
b = 1;
for (x = 0; x < a.length; x++) {
    c = a[x].length;
    if (c >= 75) b += Math.ceiling(c/75);
    }
b += a.length;
t.rows = b;
}
函数resizeTextarea(t){
a=t.value.split('\n');
b=1;
对于(x=0;x=75)b+=数学上限(c/75);
}
b+=a.长度;
t、 行=b;
}
这项工作相当不错,但当用户通过填充宽度将文本“推”到下一行时,似乎失败了。(注意:此处使用的75表示我的文本区域的宽度(以字符为单位)


还有一个奇怪的效果,[enter][key]使textarea超过文本末尾2行,然后下一个[key]将其恢复到预期的额外一行。如果代码失败,我尝试将c设置为2,因为没有Math.天花()这样的方法,而是调用它

除此之外

函数中的所有变量都是全局变量。这不是一个好的做法-您应该始终在变量声明中添加
var
关键字,使变量成为该函数的私有变量-否则您可能会意外地修改某些全局变量,并导致真正糟糕的事情发生。用于检查代码是否存在类似问题

将文本区域的宽度硬编码到函数中也是不好的。这样,您就不能对其他可能具有不同宽度的文本区域使用调整大小功能。在当前情况下,最好从textarea的
cols
属性动态读取宽度

将变量重命名为比a、b、c更有意义的变量也会大大提高可读性

例如:

function resizeTextarea(textarea) { var lines = textarea.value.split('\n'); var width = textarea.cols; var height = 1; for (var i = 0; i < lines.length; i++) { var linelength = lines[i].length; if (linelength >= width) { height += Math.ceil(linelength / width); } } height += lines.length; textarea.rows = height; } 函数resizeTextarea(textarea){ 变量行=textarea.value.split('\n'); 变量宽度=textarea.cols; var高度=1; 对于(变量i=0;i=宽度){ 高度+=数学单元(线宽/宽度); } } 高度+=线条长度; textarea.rows=高度; }
Triptych指出,我建议你也研究一下SO post的答案。

exact dupe:我在修改我在网上找到的一个函数。我最近刚试着从地板换到天花板。