textarea不能通过maxlength属性来限制字数的解决方法


Posted in Javascript onSeptember 01, 2014

textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到。与单行文本框text控件不同,它不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制以达到预设的需求。

通常的做法就是使用#脚本语言来实现对textarea文本域的字数输入限制,简单而实用。假设我们有一个id为 txta1 的textarea文本区,我们可以通过以下代码限制它的键盘输入字数为10个字(汉字或其他小角字符):

<script language="#" type="text/ecmascript"> 
window.onload = function() 
{ 
document.getElementById('txta1').onkeydown = function() 
{ 
if(this.value.length >= 10) 
event.returnValue = false; 
} 
} 
</script>

它的原理是通过对keydown(键盘键位按下)事件对指定id号的文本区进行监测,可以想象,它只能限制键盘输入,如果用户通过鼠标右键粘贴剪切板中的文本,它无法控制字数。

通过键盘输入,以上文本区只能输入10个字。但是,我们的目的并没有达到!请随便复制一些文本,试着用鼠标右键粘贴,看看发生了什么。

你可以在网上找到类似上述的其他JS脚本,它们不管多么优秀,其原理都是一样的,通过对keydown、keyup或keypress之类的键盘键 位操作事件来监控文本区的输入,无法防止鼠标右键的粘贴,为此,如果一定要真正地限制textarea的字数,我们还得为网页加另一把锁——禁用鼠标右 键,这无疑得付出额外的开销,同时也可能是网页制作者不一定愿意做的。其实,还有一个更简单的方法,使用onpropertychange属性。

onpropertychange可以用来判断预定元素的value值,当元素的value值发生变化时判断事件就会被触发,仅关心被监测元素的 value值,避开了输入的来源,从而可以比较理想地达成我们的限制字数这一目的。它属于JS范畴,可以在表单方框区代表中嵌套使用,以下是代码和效果样 式,可以像上面那样测试输入,你会发现它真正达到目的:不管用什么方式输入,它只能输入100个字(汉字或其他小解符号):

代码:

<textarea onpropertychange="if(value.length>100) value=value.substr(0,100)" class="smallArea" cols="60" name="txta" rows="8"></textarea>

当然,为了更为保险,处理表单数据的后台脚本程序还应该对提交来的数据进行再一次的检测,如果字数超出预设的数量则进行相应处理,这样才达到真正限制字数的目的。(完)

另外一种方法实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个)

<script> 
function check() { 
var regC = /[^ -~]+/g; 
var regE = /\D+/g; 
var str = t1.value; 

if (regC.test(str)){ 
t1.value = t1.value.substr(0,10); 
} 

if(regE.test(str)){ 
t1.value = t1.value.substr(0,20); 
} 
} 
</script> 
<textarea maxlength="10" id="t1" onkeyup="check();"> 
</textarea>

还有一种方式:

function textCounter(field, maxlimit) { 
if (field.value.length > maxlimit){ 
field.value = field.value.substring(0, maxlimit); 
}else{ 
document.upbook.remLen.value = maxlimit - field.value.length; 
} 
}
<textarea name=words cols=19 rows=5 class=input1 onPropertyChange= "textCounter(upbook.words, 50) "> textarea> 
剩余字数: <input name=remLen type=text id= "remLen " style= "background-color: #D4D0C8; border: 0; color: red " value=50 size=3 maxlength=3 readonly>
function LimitTextArea(field){ 
maxlimit=200; 
if (field.value.length > maxlimit) 
field.value = field.value.substring(0, maxlimit);
}
<textarea cols=50 rows=10 name="comment" id="commentarea" onKeyDown="LimitTextArea(this)" onKeyUp="LimitTextArea(this)" onkeypress="LimitTextArea(this)" ></textarea>

title="The textarea width must less than 300 characters." 放在textarea 里面提示输入最大字节数。

例如:

<textarea title="The textarea width must less than 300 characters." cols=50 rows=10 name="comment" id="commentarea" onKeyDown="LimitTextArea(this)" onKeyUp="LimitTextArea(this)" onkeypress="LimitTextArea(this)" ></textarea>
Javascript 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
javascript Math.random()随机数函数
Nov 04 Javascript
jQuery 处理页面的事件详解
Jan 20 Javascript
jquery验证邮箱格式并显示提交按钮
Nov 07 Javascript
Node.js开发者必须了解的4个JS要点
Feb 21 Javascript
Bootstrap中的Panel和Table全面解析
Jun 13 Javascript
小发现之浅谈location.search与location.hash的问题
Jun 23 Javascript
关于Promise 异步编程的实例讲解
Sep 01 Javascript
ES6中Array.copyWithin()函数的用法实例详解
Sep 16 Javascript
微信小程序左滑动显示菜单功能的实现
Jun 14 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 Javascript
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
超级好用的jQuery圆角插件 Corner速成
Aug 31 #Javascript
Html5的placeholder属性(IE兼容)实现代码
Aug 30 #Javascript
通过js为元素添加多项样式,浏览器全兼容写法
Aug 30 #Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 #Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 #Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
Aug 30 #Javascript
仿百度联盟对联广告实现代码
Aug 30 #Javascript
You might like
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
PHP重载基础知识回顾
2020/09/10 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
javascript模拟命名空间
2015/04/17 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
wxPython实现带颜色的进度条
2019/11/19 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
行政文秘岗位职责范本
2014/02/10 职场文书
核心价值观演讲稿
2014/05/13 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
群众路线剖析材料
2014/09/30 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
党员检讨书范文
2014/12/27 职场文书
大学毕业生自我评价
2015/03/02 职场文书
酒店员工管理制度
2015/08/05 职场文书
小学副班长竞选稿
2015/11/21 职场文书
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers