textarea不能通过maxlength属性来限制字数的解决方法

 更新时间:2014年09月01日 08:48:33   投稿:whsnow  
textarea称文本域,又称文本区,其不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制以达到预设的需求

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>

相关文章

  • JS实现六边形3D拖拽翻转效果的方法

    JS实现六边形3D拖拽翻转效果的方法

    这篇文章给大家分享一个利用javascript实现3D六边形拖拽翻转的效果实例,实现后的效果很赞,对大家的学习Javascript具有一定的参考借鉴价值,有需要的朋友们一起去来看看吧。
    2016-09-09
  • 使用Promise解决多层异步调用的简单学习心得

    使用Promise解决多层异步调用的简单学习心得

    下面小编就为大家带来一篇使用Promise解决多层异步调用的简单学习心得。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • javascript实现拖拽碰撞检测

    javascript实现拖拽碰撞检测

    这篇文章主要为大家详细介绍了javascript实现拖拽碰撞检测,碰撞改变颜色,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 浅谈JavaScript中的String对象常用方法

    浅谈JavaScript中的String对象常用方法

    这篇文章主要介绍了JavaScript中的String对象常用方法,非常简单实用,有需要的小伙伴参考下
    2015-02-02
  • JS 自定义函数缺省值的设置方法

    JS 自定义函数缺省值的设置方法

    有时候定义的函数需要设置默认值,因为不带就会出现一些错误,大家可以参考下这里默认值的定义方法。
    2010-05-05
  • Javascript之高级数组API的使用实例

    Javascript之高级数组API的使用实例

    今天小编就为大家分享一篇关于Javascript之高级数组API的使用实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • js 时间格式与时间戳的相互转换示例代码

    js 时间格式与时间戳的相互转换示例代码

    很多的新手朋友们对js中的时间格式与时间戳的转换比较陌生,下面就为大家详细介绍下具体的转换步骤,感兴趣的朋友可以参考下
    2013-12-12
  • JavaScript判断当前时间是在某个时间点之前/之后

    JavaScript判断当前时间是在某个时间点之前/之后

    本文主要介绍了JavaScript判断当前时间是在某个时间点之前/之后,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 用js编写简单的贪吃蛇小游戏

    用js编写简单的贪吃蛇小游戏

    这篇文章主要为大家详细介绍了用js编写简单的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Bootstrap每天必学之附加导航(Affix)插件

    Bootstrap每天必学之附加导航(Affix)插件

    Bootstrap每天必学之附加导航(Affix)插件,附加导航即粘贴在屏幕某处实现锚点功能,感兴趣的小伙伴们可以参考一下
    2016-04-04

最新评论