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 相关文章推荐
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
关于全局变量和局部变量的那些事
Jan 11 Javascript
javascript实现复选框超过限制即弹出警告框的方法
Feb 25 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
JavaScript Math.round() 方法
Dec 18 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
Oct 09 Javascript
AngularJS中的拦截器实例详解
Apr 07 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
es6学习之解构时应该注意的点
Aug 29 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
PHP实现通用alert函数的方法
2015/03/11 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
validator验证控件使用代码
2010/11/23 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
python自定义异常实例详解
2017/07/11 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
Python try except finally资源回收的实现
2021/01/25 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
便利店投资创业计划书
2014/02/08 职场文书
员工生日会策划方案
2014/06/14 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
网络销售员岗位职责
2015/04/11 职场文书
刑事上诉状范文
2015/05/22 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
Python实现滑雪小游戏
2021/09/25 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫