控制TextArea限制行数和字符数的方法讲解
如果是限制textbox允许的字符数量,很简单就可以实现,那么在textbox中统计和限制行数呢,就不是这么简单了,下面看本文如何实现吧。
方案:
使用客户端的Javascript去限制TextArea的内容为指定的字符数量和指定的行数(不一定就等于TextArea中可见的行数)。
我们能通过使用cols 和rows 属性或者 width 和height样式属性,定义可见的宽度和高度,但是我们不能通过使用HTML或者CSS限制字符数量或者文本的行数。幸运的是我们能为TextArea的内容创建一个textRange对象。这个JavaScript对象有一个只读的boundingHeight属性,通过它我们能够检索出作为textRange的高度的像素值。因此,我们只要将textRange的高度除以TextArea的lineHeight(像素值),就能得到TextArea使用的行数。
例子:
TextArea的定义:
Attributes:
我们分配name和id给我们的TextArea,我们定义它可见的大小(rows和cols
)。建议设置wrap属性为"virtual" 或者 "physical" 或者 "hard",但是不要设置为"off"。
Style properties:
font-family: 我们能使用我们可能会使用比例字体(如Arial)或等宽字体(如Courier)。第一种情况,我们反而会达到字符数限制。第二种情况,我们最可能达到行数的限制。
font-size: 在没有scrollbar情况下,如果我们希望显示允许的所有行,我们知道font-size,选择一个适当的line-height ,来计算TextArea的高度。
line-height: 我们必须设置TextArea的line-height为一像素值,与给出的font-size相对应。
height: 在没有scrollbar情况下,如果我们想要显示所有的行,我们不得不设置height至少为(rows*line-height)+(line-height/2)。但我们可以很自由忽略这个属性,选择任何其他的适合的高度。
Event handlers:
- onKeyUp:一个主要的事件来处理,当有文本输入或者使用键盘删除的时候,调用checkLimits脚本来检查TextArea的限制条件。
- onPaste 和 onCut: 但文本被粘贴到TextArea或者删除时调用脚本checkLimits.
- onBlur 当TextArea失去焦点的时候,做最后一次检查。
将能非常自由的使用其他的事件处理:例如onKeyPress等等,这取决于你的应用程序的需要。TextArea可能是空值或者包含了一些默认的文本,就像例子中显示的一样。
这个例子页面时包含了四个input来显示TextArea字符数和行数实际数量和最大数量。