一段js代码在ie下总报错,在chrome,opera,ff下皆无问题,请教下大家

Goslingy 2012-04-18 02:34:44
这是简化后能体现问题的代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">

var picArr = ["../Img/timer/0.jpg","../Img/timer/1.jpg","../Img/timer/2.jpg",
"../Img/timer/3.jpg","../Img/timer/4.jpg"];

function initEvent() {
var arr = document.getElementsByTagName("img");
for (var i = 0; i < arr.length; i++ ) {
arr[i].onmouseover = popPic;
arr[i].onmouseout = closePic;
arr[i].setAttribute("imgPath", picArr[i]);
}
}

function popPic() {
var div1 = document.createElement("div");
div1.id = "div1";
div1.style.position = "absolute";
div1.style.top = window.event.clientY + "px";
div1.style.left = window.event.clientX + "px";
div1.innerHTML = setdivContent(this);
document.body.appendChild(div1);
}

function setdivContent(image) {
var contentImg = "<img style='margin-left:2px;margin-right:2px;margin-top:2px;margin-bottom:50px;width:260px;height:370px;' src='" + image.getAttribute("imgPath") + "'></img>";
return contentImg;

}

function closePic() {
var div1 = document.getElementById("div1");
document.body.removeChild(div1);
}
</script>
</head>

<body onload="initEvent()">
<table cellspacing="5">
<tr>
<td><img src="../Img/timer/100.png" /></td>
<td><img src="../Img/timer/101.png" /></td>
<td><img src="../Img/timer/102.png" /></td>
<td><img src="../Img/timer/103.png" /></td>
<td><img src="../Img/timer/104.png" /></td>
</tr>
</table>
</body>
</html>

使用ie开发者工具调试,会发现鼠标在缩略图上乱舞动时
function closePic() {
var div1 = document.getElementById("div1");
document.body.removeChild(div1);
}
div1经常会经常为null,所以document.body.removeChild(div1);就会报参数错误
而使用firefox,opera,chrome开发者工具的控制台里都不会报这个错
大家可以直接运行代码,就是对应图片路径修改下,在适当目录存入图片就好

请教大家下是什么原因,谢谢啦^_^
...全文
237 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Goslingy 2012-04-18
  • 打赏
  • 举报
回复
改了一行代码的位置,果然解决了问题,2楼说的有点对,但不是ie的问题,是2个线程处理先后的问题,
function popPic() {
var div1 = document.createElement("div");
div1.id = "div1";
document.body.appendChild(div1);
div1.style.position = "absolute";
div1.style.top = window.event.clientY + "px";
div1.style.left = window.event.clientX + "px";
div1.innerHTML = setdivContent(this);

}
这个函数这么写就可以很大程度避免问题出现了,ie下几乎不出现了
没人回答,结贴了,分都给你,哈哈
Goslingy 2012-04-18
  • 打赏
  • 举报
回复
肯定是onmouseover 后才会onmouseout ,所以和节点添加顺序无关,必然是我已经加了的
而且ie里不是每次都错,鼠标晃来晃去晃几次后才错一下,哈哈
不过还是很感谢楼上的回答
沧半闲 2012-04-18
  • 打赏
  • 举报
回复
IE和其他浏览器添加节点和属性时 处理顺序不一样
沧半闲 2012-04-18
  • 打赏
  • 举报
回复
先document.body.appendChild(div1);
后设置参数

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧