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知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
AngularJS+Node.js实现在线聊天室
Aug 28 Javascript
React.js入门学习第一篇
Mar 30 Javascript
js添加事件的通用方法推荐
May 15 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
Nov 21 Javascript
jQuery设置Easyui校验规则(推荐)
Nov 21 Javascript
详解ECharts使用心得总结
Dec 06 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
详解auto-vue-file:一个自动创建vue组件的包
Apr 26 Javascript
vue学习笔记之slot插槽用法实例分析
Feb 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
Python银行系统实战源码
2019/10/25 Python
快速创建python 虚拟环境
2020/11/28 Python
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
C#公司笔试题
2014/03/28 面试题
主治医师岗位职责
2013/12/10 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
行风评议整改报告
2014/11/06 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
Python pandas之求和运算和非空值个数统计
2021/08/07 Python