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 相关文章推荐
json的定义、标准格式及json字符串检验
May 11 Javascript
教你如何终止JQUERY的$.AJAX请求
Feb 23 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
Apr 01 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
常用的javascript设计模式
Jan 11 Javascript
js 实现省市区三级联动菜单效果
Feb 20 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
浅谈Angular 中何时取消订阅
Nov 22 Javascript
完美解决linux下node.js全局模块找不到的情况
May 16 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 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
Linux编译升级php的详细方法
2013/11/04 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
vue--vuex详解
2019/04/15 Javascript
python统计文本文件内单词数量的方法
2015/05/30 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
财务出纳岗位职责
2014/02/03 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
腾讯广告词
2014/03/19 职场文书
好听的队名和口号
2014/06/09 职场文书
护理专科学生自荐书
2014/07/05 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
分享Python异步爬取知乎热榜
2022/04/12 Python