Html 我需要什么代码才能使此文本框的列数等于字符数?

Html 我需要什么代码才能使此文本框的列数等于字符数?,html,text,Html,Text,我将列数设置为40,但文本框可以容纳41个字符。我需要的字符数正好是列数,因为我有一个函数,可以根据列数计算文本行数 <!DOCTYPE html> <html> <head> <style type="text/css"> textarea { border: 0 none white; overflow: hidden; padding: 0; outline: none; background-c

我将列数设置为40,但文本框可以容纳41个字符。我需要的字符数正好是列数,因为我有一个函数,可以根据列数计算文本行数

<!DOCTYPE html>
<html>
<head>


<style type="text/css">

textarea
{
    border: 0 none white;
    overflow: hidden;
    padding: 0;
    outline: none;
    background-color: #D0D0D0;
    resize: none;
}
</style>

<script>

function countLines(theArea)
{
  var theLines = theArea.value.replace((new RegExp(".{"+theArea.cols+"}","g")),"\n").split("\n");

  if(theLines[theLines.length-1]=="")
  theLines.length--;
  theArea.form.lineCount.value = theLines.length;
}
</script>

<script type="text/javascript">
var observe;
if (window.attachEvent) 
{
    observe = function (element, event, handler) 
    {
        element.attachEvent('on'+event, handler);
    };
}
else 
{
    observe = function (element, event, handler)
    {
        element.addEventListener(event, handler, false);
    };
}
function init ()
{
    var text = document.getElementById('text');
    function resize () 
    {
        text.style.height = 'auto';
        text.style.height = text.scrollHeight+'px';
    }
    /* 0-timeout to get the already changed text */
    function delayedResize ()
    {
        window.setTimeout(resize, 0);
    }
    observe(text, 'change',  resize);
    observe(text, 'cut',     delayedResize);
    observe(text, 'paste',   delayedResize);
    observe(text, 'drop',    delayedResize);
    observe(text, 'keydown', delayedResize);

    text.focus();
    text.select();
    resize();
}


</script>

</head>

<body onload="init();">
<form>


<textarea rows="5" cols="40" style="height:1em;" id="text"; name="myText" onKeyUp="countLines(this)">

</textarea>


<br>
Cost: <input type=text name="lineCount" size="1" value="0"> Dollars

</form>
</body>

</html>

文本区
{
边框:0非白色;
溢出:隐藏;
填充:0;
大纲:无;
背景色:#D0;
调整大小:无;
}
功能计数线(theArea)
{
var theLines=theArea.value.replace((新的RegExp(“.{”+theArea.cols+“}”,“g”),“\n”).split(“\n”);
如果(线条[线条长度-1]=“”)
长度;
theArea.form.lineCount.value=Lines.length;
}
var观察;
如果(窗口附件)
{
观察=函数(元素、事件、处理程序)
{
元素attachEvent('on'+事件,处理程序);
};
}
其他的
{
观察=函数(元素、事件、处理程序)
{
元素addEventListener(事件,处理程序,false);
};
}
函数init()
{
var text=document.getElementById('text');
函数调整大小()
{
text.style.height='auto';
text.style.height=text.scrollHeight+'px';
}
/*0-获取已更改文本的超时*/
函数delayedResize()
{
设置超时(调整大小,0);
}
观察(文本“更改”,调整大小);
观察(文本“剪切”,延迟缩放);
观察(文本“粘贴”,延迟缩放);
观察(文本“下降”,延迟缩小);
观察(文本“按键”和“延迟缩放”);
text.focus();
text.select();
调整大小();
}

费用:美元
cols
定义为平均字符宽度。根据您的字体和使用的字母,每行可以容纳更多或更少的字符。使用固定宽度字体(如Courier)可能会有所帮助,但我不会依靠
cols
将用户限制在特定的行长度内
cols
仅强制将单词环绕在某个近似的
textarea
宽度。我不会依靠它来限制线的长度

如果您已经在使用JavaScript,为什么不让一个键处理程序使用正则表达式在每40个字符后插入换行符呢

编辑:

演示:


带有单独格式化输出的演示:

属性
cols
基于“平均字符宽度”。因此,根据字体的不同,实际字符数可能会有所不同。尝试将textarea设置为使用单空格字体:如果我不使用单空格字体,我将如何计算行数?40列是任意的,但我实际上希望框的宽度精确设置为265像素,因为这是我的报纸中列的宽度。因此,我希望客户能够将他们的文章粘贴到文本框中,并让它在给定列宽和字体大小为7的情况下输出他们的文章将占用的行数。我建议在单独的文本框中进行输出,但您可以在相同的情况下进行输出,如本演示中所示:好的,这样就解决了行数的问题,但现在它遇到了一个问题,我不能点击“回车”并在下一行输入更多的文本。只有当下一行到达末尾并溢出到下一行时,我才能到达下一行。此外,如果我粘贴一大块文本,它将自动重新格式化文本并删除空格。在原始函数中,它将保持格式不变。这些只是示例。您将需要更多的代码来满足所有需求。我不知道你所有的要求。下面是一个更复杂的示例,它保留原始文本,不打断大于40个字符的单词,并接受复制粘贴: