龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > div+css/html >

控制TextArea限制行数和字符数的方法讲解

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
如果是限制textbox允许的字符数量,很简单就可以实现,那么在textbox中统计和限制行数呢,就不是这么简单了,下面看本文如何实现吧。 方案: 使用客户端的Javascript去限制TextArea的内容

如果是限制textbox允许的字符数量,很简单就可以实现,那么在textbox中统计和限制行数呢,就不是这么简单了,下面看本文如何实现吧。 

方案:

使用客户端的Javascript去限制TextArea的内容为指定的字符数量和指定的行数(不一定就等于TextArea中可见的行数)。

我们能通过使用cols 和rows 属性或者 width 和height样式属性,定义可见的宽度和高度,但是我们不能通过使用HTML或者CSS限制字符数量或者文本的行数。幸运的是我们能为TextArea的内容创建一个textRange对象。这个JavaScript对象有一个只读的boundingHeight属性,通过它我们能够检索出作为textRange的高度的像素值。因此,我们只要将textRange的高度除以TextArea的lineHeight(像素值),就能得到TextArea使用的行数。

例子:

  

TextArea的定义:

Code [http://www.xueit.com]
<textarea name="myText" id="myText" cols="44" rows="4" wrap="virtual" style="font-family:arial; font-size:14px; line-height:17px; height:77px; overflow:auto;" onKeyUp="checkLimits(myForm.myText,myForm.myChars,myForm.myLines);" onPaste="checkLimits(myForm.myText,myForm.myChars,myForm.myLines);" onCut="checkLimits(myForm.myText,myForm.myChars,myForm.myLines);" onBlur="checkLimits(myForm.myText,myForm.myChars,myForm.myLines);"> Text in the limited textarea may never exceed the defined maximum number of rows and/or characters. </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字符数和行数实际数量和最大数量。

Code [http://www.xueit.com]
<input name="myChars" id="myChars" type="text" style="text-align:center; border-width:0px;" value="0" size="4" maxlength="4" readonly="readonly"> <input name="maxChars" id="maxChars" type="text" style="text-align:center; border-width:0px;" value="0" size="4" maxlength="4" readonly="readonly"> <input name="myLines" id="myLines" type="text" style="text-align:center; border-width:0px;" value="0" size="4" maxlength="3" readonly="readonly"> <input name="maxLines" id="maxLines" type="text" style="text-align:center; border-width:0px;" value="0" size="4" maxlength="3" readonly="readonly">


精彩图集

赞助商链接