HTML5给表单带来了很多改变,比如今天要说的maxlength,这个属性可以限制输入框输入的最大字字符数,更方便的是对于粘贴的内容也能够根据字符数自动截断。

最近就接到这要一个需求,限制用户最多输入600字(汉字和字母不区分),对于粘贴的内容也要能自动截断,输入600字后就无法输入。

第一时间想到了maxlength,基本满足需求,但还是有一些怪异的表现。

看下面的代码:

/600

text.oninput = function() {

already.textContent = text.value.length;

}

上述代码中限制输入字符数为600,并通过oninput监听用户的输入,没有用keydown,因为keydown只能监听用户键盘输入,对于粘贴没有反应。。。oninput可以做到。

这时候直接输入600字后就不再可以输入,删除一些,再输入一些,表现正常。奇怪的是如果你粘贴进textarea里一大堆文字,以为maxlength的存在自动截断,此时textarea里正好有600个字符,这时候你删除一些字符,然后再尝试输入,你会发现:

卧槽,无法输入了!!!再删的多一些,这时可以继续输入,但是!!!在输入还不到600字符的时候,突然又不能输入了!!!

chrome下以及我的android机器下都会这样。。暂时不知道原因。测试了下input,不会有这样的情况出现,而且maxlength属性的值小一点的话就不会有这种情况,比如10。。。

这样的话maxlength就不靠谱了,就自己多写点代码吧,既然oninput这么灵活,就用它了。

修改下代码,去掉textarea的maxlength属性,使用input监听textarea的value值,超过600就自动截断,造成一种无法输入的错觉。

text.oninput = function() {

if(text.value.length >= 600) {

text.value = text.value.substr(0,600);

}

already.textContent = text.value.length;

}

不放心的话,可以继续监听keydown事件,在输入大于600字符后阻止默认事件,但是有几个键是不能禁止的:删除退格和回车:

text.onkeydown = function() {

if(text.value.length >= 600) {

// 删除:46 退格:8 回车:13

if (!(e.which == '46' || e.which == '8' || e.which == '13')) {

e.preventDefault();

}

}

}

IE8以下不支持maxlength属性,也不支持oninput,但是他们有一个更强大的方法:onpropertychange。

下面通过一端代码讲解textarea实现maxlength属性

function textlen(x,y){

var thelength = x.value.length;

window.status=thelength+' of '+y+' maximum characters.';

}

function maxtext(x,y){

tempstr = x.value

if(tempstr.length>y){

x.value = tempstr.substring(0,y);

}

textlen(x,y);

}

cols="45"

rows="3"

wrap="virtual"

οnkeypress="return(this.value.length<20)"

οnkeydοwn="textlen(this,20)"

οnkeyup="textlen(this,20)"

οnblur="maxtext(this,20)">

html中text的maxlength,详解maxlength属性在textarea里奇怪的表现相关推荐

  1. css中的position定位详解

    css中的position定位详解 position属性指定了元素的定位类型. position属性的5个值:static,relative,fixed,absolute,sticky; 元素可以使用 ...

  2. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  3. python爬虫多线程是什么意思_python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

  4. JSP 中EL表达式用法详解

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  5. python数据处理常用函数_pytorch中的自定义数据处理详解

    pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法. :.getitem:返回一条数据或者一个样本,obj[in ...

  6. python getattr_Python中的getattr()函数详解:

    标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...

  7. WPF中的鼠标事件详解

    WPF中的鼠标事件详解 Uielement和ContentElement都定义了十个以Mouse开头的事件,8个以PreviewMouse开头的事件,MouseMove,PreviewMouseMov ...

  8. python构造自定义数据包_pytorch中的自定义数据处理详解

    pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法. :.getitem:返回一条数据或者一个样本,obj[in ...

  9. python text函数_python可视化text()函数使用详解

    python可视化text()函数使用详解 这篇文章主要介绍了python可视化text()函数使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考 ...

最新文章

  1. .net内存回收与Dispose﹐Close﹐Finalize方法
  2. 声音大小与振幅的关系_原来声音的属性有这三种!
  3. P1018 乘积最大
  4. linux打开vivado_ubuntu启动vivado UBUNTU 16.04安装VIVADO成功启动SDK - Linux - 服务器之家...
  5. 什么是Intent? 转
  6. C++四种cast操作符
  7. 【转】如果要像钢铁侠那样看世界,谷歌眼镜远不够!还有这些技术问题需要解决...
  8. 学python心得体会800字-python 学习心得
  9. dwz怎么使用数据加载中提示_SOLIDWORKS在使用中提示内存不足怎么办?
  10. 拓端tecdat|如何在R语言中建立六边形矩阵热图heatmap可视化
  11. Linux 金字塔 的shell命令,shell脚本编程设计——根据输入的数输出菱形、三角形或者数字金字塔(带闪烁颜色)...
  12. docker中 system limit for_java中的split函数的坑
  13. Java 用Myeclipse部署项目基础坏境搭建
  14. ALFA机器视觉深度学习外观缺陷检测系统软件机器视觉
  15. linux更新war包操作步骤,关于Linux系统下基于Tomcat部署和升级war包的详细过程
  16. OpenGL(十三)——Qt OpenGL绘制三维图形
  17. 服务器系统文件sam在哪里,SAM文件介绍
  18. Transformer架构:位置编码
  19. Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
  20. openstack理论知识【Openstack证书考试 2022】

热门文章

  1. 访问学者在加拿大游玩,有哪些名胜古迹?
  2. tomcat的启动流程
  3. Excel如何批量为空白单元格填充下方非空数据值
  4. asp论坛在线人数统计研究
  5. jq数组赋值 java_js,jquery,数组操作小结
  6. linux打印机属性设置,linux打印机服务器设置
  7. 华为oj之最小公倍数
  8. Python中安装requests库总是报错的解决方法
  9. 逻辑回归实现客户逾期分析
  10. vscode保存自动将CRLF 转换成 LF