您的位置:首页 > Web前端 > JavaScript

JavaScript在IE中"意外地调用了方法或属性访问"

2017-11-29 00:00 441 查看
摘要: IE不兼容的问题

JavaScript在IE中"意外地调用了方法或属性访问"

错误例子:

在使用Jquery的append方法时,在 IE8 下报错:意外地调用了方法或属性访问

进行定位发现报错的位置为:jQuery的 b.appendChild(a) 方法

1、ie对动态append的内容有要求,需要将一个具有完整意义的html一起append到代码中
检查脚本,发现我append操作的是
<option>
标签,而且是完整的,那原因应该不是这个

2、操作元素类型不匹配
ie下将类型不匹配的值强行添加到dom元素中时会产生该错误,该问题出现的几率较大,我这里的也是这个问题,将
<option>
标签强行append到了input上

3自定义标签

append中的HTML如果包含有自定义标签,不好意思,也会报错,解决办法,把自定义标签改成,HTML自带的标签。

ie健壮性不强,出错后就导致脚本无法执行下去了,这在其他浏览器是会被忽略掉的,所以往往也难以找到问题

网上搜集的问题概述

这是一条脚本的报错信息,是我在KISSY中遇到了,报错模块在base.js中,这是KISSY里的一个核心模块。当然在jQuery中也一样会遇到,因为这是dom操作中遇到的bug。初次看到这个bug很无奈,居然是框架里的报错信息不是自己写的代码,完全无从下手。

其次就是什么时候报错。这个报错产生在ie6、7、8中,在ie8以上没有报错,坑爹的ie啊,FUCK!!

解决办法

下面直奔主题来说一下解决的办法
先说一下为什么会出现这个错误,根本原因就是在ie8以下的浏览器里,操作一个DOM的非法属性时会出现,举例说明下

第一种情况,操作了一个DOM不该有的属性

<input type="text" id="test">

如果要改变这个dom的值应该是修改它的value属性

$('#test').val('hello');


但是如果写成了

$('#test').html('hello');

在ie8以上的浏览器也OK,给你识别纠正了,但是在ie8以下就不行了

第二种情况,标签的闭合上也就是我出错的地方

<input type="text" id="test"></input>
<p>hello</p>

由于编辑器的自动补全,往往会忽略一些细节上的错误例如为input自动加了闭合标签,如果只操作这个dom的值无影响,但是如果操作下个同级元素就会报错了例如

$('#test').next().html('hello');

当debug到test的下一级标签时,便会发现这个dom的nodeName是input而不是p,input操作html属性是不合法的,因此就报错啦。解决方法就是把input的闭合标签干掉
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  IE不兼容 Javascript