现在的位置: 首页 > 综合 > 正文

IE在弹出层中使用空内容的Textarea时会报错的解决方法

2013年10月31日 ⁄ 综合 ⁄ 共 952字 ⁄ 字号 评论关闭

最近在IE里使用Textarea时发现一直会报错,而且这个错误是个能导致整个浏览器奔溃的错误,查了好久发现,如果这个Textarea被放在一个blackui制作的弹出层中时,当弹出层弹出的瞬间,如果光标在Textarea上并且Textarea中内容为空时,你快速的按键盘(随便什么只要能输入的字符),立刻整个浏览器就奔溃了(这个动作一定要快,在Textarea中的光标闪第一下之前快速的按键盘,如果它闪了一下就出不来了)。在FF下无法重现,只能在IE下(我用的是IE8)出现。苦思冥想很长时间都没有发现问题,关键是对于这个输入框的操作也只有在脚本里,就算脚本真的有问题也不可能导致整个浏览器的崩溃?
JS脚本没有那么大威力瓦?

 

郁闷了几个小时后,突然一个地方让我注意到,我发现会出问题的输入框在弹出之前都会执行一个清空过程($("#textarea_Note").text("") 这样清空内容),难道问题出在这里?不管了先试试,我将$("#textarea_Note").text("") 的这句改成了jquery里的$("#textarea_Note").empty(),也就是直接清空textarea里的内容(innerHTML=""),再时问题解决了!这里补充一下如果还是不行,看看你的textarea的innerText里是不是在拐弯抹角的地方被赋过undefined值如果这样也会发生这个情况。

 

可为什么FF下就没有问题呢?分析下来, FF里取textarea值的方法是取它的value值,而IE里取的是innerText,当你将innerText清空时可能并没有完全的清空textarea当中的对象,当你在选中Textarea的瞬间IE还没有完成初始化Textarea下子对象(或者说清空它下面的字对象因为文本内容也是一个对象),当你在IE初始化textarea的innerHTML之前你就快速的输入内容你此时可能就输入到了某个并不支持输入的对象中这个时候IE浏览器也就崩溃了(写只读区错误)。看来不是所有浏览器都支持innerText到也有道理,如果某个对象中即包含HTML对象又包含某些文字,当你给innerText清空时其实并没有删除所有这个对象下的子对象,而且这些对象可能都是你看不到的。

抱歉!评论已关闭.