这篇文章主要介绍了maxlength属性在textarea里奇怪的表现的相关资料,需要的朋友可以参考下

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

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

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

看下面的代码:

1
2
3
4
5
<textarea name="text" id="text" maxlength="600"></textarea>
<p><span id="already"></span>/<span>600</span></p>
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就自动截断,造成一种无法输入的错觉。

1
2
3
4
5
6
text.oninput = function() {
  if(text.value.length >= 600) {
    text.value = text.value.substr(0,600);
  }
  already.textContent = text.value.length;
}

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

1
2
3
4
5
6
7
8
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属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script language="javascript" type="text/javascript">
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);
}
</script>
<form name="myform">
   <textarea name="mytextarea" 
              cols="45" 
              rows="3" 
              wrap="virtual" 
              onkeypress="return(this.value.length<20)"
              onkeydown="textlen(this,20)" 
              onkeyup="textlen(this,20)" 
              onblur="maxtext(this,20)">
   </textarea>
</form>

详解maxlength属性在textarea里奇怪的表现的更多相关文章

  1. maxlength属性在textarea里奇怪的表现

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

  2. CSS中详解hight属性

    目录结构: // contents structure [-] hight属性值类型一览表 height的%的使用 定义 实例 需要注意的 参考文章 hight属性值类型一览表 value descr ...

  3. JAVAEE——spring01:介绍、搭建、概念、配置详解、属性注入和应用到项目

    一.spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还 ...

  4. CSS中详解height属性

    目录结构: contents structure [+] hight属性值类型一览表 height的%的使用 定义 实例 需要注意的 参考文章 hight属性值类型一览表 value describt ...

  5. oracle创建定时器详解|interval属性

    定时任务首先先创建定时任务中的存储过程 create or replace procedure pro_jggl as                                          ...

  6. react目录结构、demo实例详解、属性数据绑定方式

    1.目录结构 2.demo实例详解 a)创建Home.js import React, { Component } from 'react'; //创建一个组件必须要集成Component组件,且组件 ...

  7. CSS的margin属性:详解margin属性

    在网上看到的一篇文章,说的比较全面.原文地址:http://www.poluoluo.com/jzxy/201206/167007.html 你真的了解margin吗? 你知道margin有什么特性吗 ...

  8. 详解tintColor属性

    tintColor属性是iOS7之后新加的一个属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构.它主要是改变控件的颜色,以获取一些有意思的视觉效果. ti ...

  9. [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 【Java面试题】56 在JAVA中如何跳出当前的多重嵌套循环?

    在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环.例如, public class xunhuan { pu ...

  2. CentOS6.8忘记root密码的解决办法(开始初始化也可以用)

    在开机启动的时候按键盘上的“E”键会进入如下界面. 选择相应的内核,再次按“E”,出现下图,选择第二项,再次按“E”键 经过第二步,这个画面可以编辑,在信息的最后加“空格”,然后键入“single”( ...

  3. jQuery-编辑选择结果(添加、筛选、过滤或检测)

    编辑选择结果 操作  实例  效果  备注 添加 添加选择器 $("p").add(".a") 添加类名为a的选择器 并不影响源结果集     $(" ...

  4. win7 键盘

    请在任务栏的空白处右击,在弹出的选项中选择“工具栏”,再在“Table PC输入面板”选项中打勾,这里任务栏的最右边就会出现一个Table PC 输入面板”的图标

  5. 在Office上怎么用MathType编辑公式

    随着无纸化的办公程序越来越深入普及到社会的各个层面,很多资料都是电子档.从前手写的内容全都转换到了电脑上.用Office办公时,有一个很大的问题,那就是其中的公式要怎么编辑? 从前用手写毫无困难,什么 ...

  6. ModelState.AddModelError使用

    后台: ModelState.AddModelError("userPwd", "请输入密码!"); ModelState是一个字典类型,这句话的作用是向Mod ...

  7. Cocos2d-x 3.0final 终结者系列教程10-画图节点Node中的Action

    Action是作用在Node上的逻辑处理,比方让Node移动.旋转.缩放.变色.跳跃.翻转.透明等等.都有相相应的Action Action怎样在Node上使用 1. 定义Action对象 如 aut ...

  8. day08<面向对象+>

    面向对象(代码块的概述和分类) 面向对象(代码块的面试题) 面向对象(继承案例演示) 面向对象(继承的好处和弊端) 面向对象(Java中类的继承特点) 面向对象(继承的注意事项和什么时候使用继承) 面 ...

  9. swift--控件工厂类的实现

    控件工厂类,简而言之就是,减少代码的复用率,只在哪里用,然后在哪里调: 代码如下: import UIKit class ViewFactory: UIView,UITextFieldDelegate ...

  10. /etc/services

    /etc/services文件是记录网络服务名和它们对应使用的端口号及协议,很多的系统程序要使用这个文件.一般情况下,不要修改该文件的内容,否则可能会造成端口冲突 常见的服务如下,各个字段分别表示:s ...