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获取控件位置以及不同浏览器中的差别介绍
Aug 08 Javascript
js 判断上传文件大小及格式代码
Nov 13 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
Jul 02 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
Apr 16 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 Javascript
简单实现js间歇或无缝滚动效果
Jun 29 Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
Feb 13 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
超级好用的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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
微信小程序异步处理详解
2017/11/10 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
全面分析Python的优点和缺点
2018/02/07 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
体育教师工作总结的自我评价
2013/10/10 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
法学自荐信
2014/06/20 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
tree shaking对打包体积优化及作用
2022/07/07 Java/Android