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 ...
随机推荐
- jbpm入门样例
1. jBPM的简介 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储. 參考 http://www.jbos ...
- nopCommerce的源代码结构和架构
下载地址 nopcommerce的源代码很容易拿到,它是开源的,所以你可以直接到网上下载.下载地址:http://www.nopcommerce.com/downloads.aspx 因为nop是国外 ...
- tar备份系统
一.概述 前几天我通过SSH正在调戏汤姆猫(tomcat)的时候,服务器上CentOS突然挂了.开机grub,使用光盘linux rescue修复提示找不到linux分区,然后想mount硬盘备份系统 ...
- 【转】 使用Beaglebone Black的PRU(三)——实现高达100MHz的GPIO输出
友情提示:请先按照本系列(一)(二)的说明安装PRU工具并跑通hello world再继续按本文操作. PRU操作GPIO有很多种方式,本系列之(二)中的是一种,但最快速的方式是通过直接“写”r30和 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.17
假设w=4,我们能给每个可能的十六进制数字赋予一个数值,假设用一个无符号或者补码表示.完成下表: x 无符号(B2U(x)) 补码(B2T(x)) 十六进制 二进制 0xE 1110 14 -2 0x ...
- LVM的添加与删除
#############################创建 fdisk -l查看分区情况 fdisk /dev/xvdb pvcreate /dev/xvdb1 vgextend VolGroup ...
- Ubuntu 修改时间
输入"date",显示的是: Tue Jan :: UTC 输入"date -R" 显示的是: Tue, Jan :: + 和北京时间相差了8个小时. 1.选择 ...
- spark stream初探
spark带了一个NetworkWordCount测试程序,用以统计来自某TCP连接的单词输入: /usr/local/spark/bin/run-example streaming.NetworkW ...
- ASP.Net_入门准备
基础篇:(学习能力取决于你的基础扎不扎实) 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET. ASP.NET是一个全 ...
- Android——按钮的事件监听
关于Button按钮的四种事件监听方法总结 首先我们在activity_main.xml里面先定义一个Button空间 <RelativeLayout xmlns:android="h ...