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 相关文章推荐
jQuery 下拉列表 二级联动插件分享
Mar 29 Javascript
jQuery常用操作方法及常用函数总结
Jun 19 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
javascript获得当前的信息的一些常用命令
Feb 25 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
JavaScript实现图像模糊化的方法实例
Jan 15 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
Angularjs中ng-repeat的简单实例
Aug 25 Javascript
解决angular2 获取到的数据无法实时更新的问题
Aug 31 Javascript
vue.js单文件组件中非父子组件的传值实例
Sep 13 Javascript
vue路由教程之静态路由
Sep 03 Javascript
使用axios请求时,发送formData请求的示例
Oct 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
深入了解php4(1)--回到未来
2006/10/09 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
Python短信轰炸的代码
2020/03/25 Python
python如何进行矩阵运算
2020/06/05 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
元旦获奖感言
2014/03/08 职场文书
项目合作意向书范本
2014/04/01 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
MySQL时区造成时差问题
2022/04/13 MySQL