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 find和children方法使用
Jan 31 Javascript
jQuery之排序组件的深入解析
Jun 19 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
Oct 17 Javascript
jquery实现的仿天猫侧导航tab切换效果
Aug 24 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
Jun 07 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
js实现固定宽高滑动轮播图效果
Jan 13 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
Vue作用域插槽slot-scope实例代码
Sep 05 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
Apr 15 Javascript
React如何实现浏览器打印部分内容详析
May 19 Javascript
详解js创建对象的几种方式和对象方法
Mar 01 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 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
PHP基本语法实例总结
2016/09/09 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
JS实现带动画的回到顶部效果
2017/12/28 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
小学生评语集锦
2014/04/18 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
2015年护士节活动总结
2015/02/10 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
Oracle使用别名的好处
2022/04/19 Oracle