IE 6/7下自赋值导致 overflow 溢出
情景是要限制一个textarea的最大输入字数(100字, 这字数限制也太少了点吧,不大气)
由于限制输入后需要允许 回退,全选等功能键,故放弃keyup, keydown组合
选用property 和 input事件, 由于ff 和 chrome支持maxlength,故这里就只为ie加事件处理
$addDescArea.on("propertychange", function (e) { if ($addDescArea.val().length >= 100) {
$addDescArea.val($addDescArea.val().substr(0, 100)); }
});
代码很简单,当>=100字时,截取前100个字符
但是在IE6/7 下会抛出如下异常
"Stack Overflow at line 0"
后来google之后,得到原因是触发了死循环
即:
$addDescArea.val($addDescArea.val().substr(0, 100));
上面代码中
$addDescArea.val 方法在反复的调用和递归, 于是我把代码改为
var text = $addDescArea.val(); if(text.length > 100)
{
$addDescArea.val(text.substr(0, 100))
}
把原始value存到一个变量里,但是错误依旧,
最后只能尝试 另外声明一个变量把当前的 value存放进去,然后再用这个新的变量赋值
$addDescArea.on("propertychange", function (e) {
var areaText = $addDescArea.val(),
maxLength = parseInt(e.target.getAttribute("data-maxlength") || 100, 10),
cutText = areaText.substr(0, maxLength); if (areaText.length >= maxLength) {
$addDescArea.val(cutText);
}
});
最后个bug的根本原因是:
在IE6/7 上
var text = $addDescArea.val()
是指向栈中的一块大小为$addDescArea.val()的string类型的空间(称为x)
而$addDescArea.value(aa) 则是将x修改为aa, 并非新开一块大小为aa的栈空间
所以
$addDescArea.val($addDescArea.val().substr(0, 100));
是在循环递归的操作这同一块栈空间,导致发生死循环 解决方法就是将textArea.val() 拷贝一份然后再赋值,
areaText.substr(0, maxLength);
此处的substr就是创建了一个新的string
IE 6/7下自赋值导致 overflow 溢出的更多相关文章
- ARC下的block导致的循环引用问题解析
ARC下的block导致的循环引用问题解析 更详细细节请参考 http://blog.sina.com.cn/s/blog_8c87ba3b0101m599.html ARC下,copy到堆上的blo ...
- [转载]linux下网卡漂移导致网络不可用
转自:https://blog.csdn.net/hyatsz/article/details/47690993 linux下网卡漂移导致网络不可用 2015年08月16日 00:48:50 hyat ...
- Python_关于多线程下变量赋值取值的一点研究
关于多线程下变量赋值取值的一点研究 by:授客 QQ:1033553122 1.代码实践1 #!/usr/bin/env python # -*- coding:utf-8 -*- __author_ ...
- 并发场景下HashMap死循环导致CPU100%的问题
参考链接:并发场景下HashMap死循环导致CPU100%的问题
- IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常
标准参考 根据W3C CSS2.1规范第8.3节中的描述,边距属性设置了一个框的边距区的宽度.'margin' 缩写属性设置所有四边的边距,而其它的边距属性( 'margin-top' ,'margi ...
- RB1001: IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常
标准参考 根据W3C CSS2.1规范第8.3节中的描述,边距属性设置了一个框的边距区的宽度.'margin' 缩写属性设置所有四边的边距,而其它的边距属性( 'margin-top' ,'margi ...
- {前端CSS} 语法 Css的几种引入方式 css选择器 选择器的优先级 CSS属性相关 背景属性 边框 CSS盒子模型 清除浮动 overflow溢出属性 定位(position)z-index
前端CSS CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 当浏览器读到一个样式表,它就会按照这个样式表来对文 ...
- 图片--Android加载图片导致内存溢出(Out of Memory异常)
Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...
- POI读写大数据量excel,解决超过几万行而导致内存溢出的问题
1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...
随机推荐
- 深入探索 Java 热部署--转
在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作.本文将探索如何在不破 ...
- HTML5表单内元素的required属性
当表单内元素(如input.textarea)中有required属性并且值不为false的时候,则该字段不能为空,否则提交失败. <input type="text" au ...
- 我的开发框架(WinForm)
近来,看园子里,好多同学,展示自己工作中的开发框架,有的功能强大,有的短小精悍,我也来凑个热闹,望各位大侠指点一二. 一.指导思想 1.尽量减少程序员对数据库的依赖,或者说尽力少的写sql 语句.根据 ...
- 2014年6月5日 深圳 IBM 安全解决方案会议通知
2014年6月5日 深圳 IBM 安全解决方案会议通知 http://gdtesting.com/news.php?id=191 时间: 2014年6月5日 地点: 深圳大中华喜来登 议程: IBM安 ...
- RPM的基础命令/yum基本命令
rpm的使用方式非常简单,常用的一些命令如下: 安装软件:rpm -ivh *.rpm 卸载软件:rpm -e 软件名 升级形式安装:rpm -U *.rpm 常用参数: -v 显示详细信息 -h 显 ...
- 目前电脑的硬件尺寸参数,计划弄个小一些的ATX机箱
显卡:讯景R9 370x 尺寸:234×115×39mm 主板:技嘉GA-970A-DS3P 尺寸: 30.5X21.5 cm
- for循环里面的判断条件
先看下面这段代码,你很容易猜到结果 for(i=0;i<10;i++){ console.log(i); // 结果是打印出 1,2,3,4,5,6,7,8,9 } 再看一下这款代码,也许很容易 ...
- 다음에 적용될 Auto_increment 값 알아 내기 (计算下一个Auto_increment的值)
Mysql 4.X <------ SHOW TABLE STATUS FROM [DB_NAME] LIKE '[TABLE_NAME]'; Mysql 5.X ----------- ...
- scala学习笔记:各种奇怪的写法
Unit函数的定义: def foo()={println("hi")} 等号可以省略: def foo(){println("hi")} update方法: ...
- 让aspx页面也可以通过url路由进行访问
参考文章:http://blog.csdn.net/zhanglong_longlong/article/details/8841030 这两天,在工作中需要将aspx的页面虚拟成url路径访问.比如 ...