我有一点JavaScript问题。代码在Opera和Firefox浏览器中工作,但在Internet Explorer 8中没有。有人知道为什么吗?
function createbtn(object, inner) {
var hover = document.createElement("div");
hover.setAttribute("class", "myarea");
if (inner) {
hover.style.width = object.width - 16 + "px";
hover.style.height = object.height - 16 + "px";
hover.style.top = getposy(object) + "px";
hover.style.left = getposx(object) + "px";
} else {
hover.style.width = object.width + "px";
hover.style.height = object.height + "px";
hover.style.top = getposy(object) - 8 + "px";
hover.style.left = getposx(object) - 8 + "px";
}
}
我只是在学习Javascript。任何反馈欢迎。 西蒙
答案 0 :(得分:9)
如果object.width
小于16
hover.style.width = object.width - 16 + "px";
然后这将在前面产生一个带负号的字符串,这是非法的,因为宽度必须是非负的。
你可以通过说
来解决这个问题hover.style.width = Math.max(object.width - 16, 0) + "px";
和高度类似。
许多浏览器会忽略无效内容,但某些模式下的IE更严格,因此您可能只是在其他浏览器中出现静默失败。
答案 1 :(得分:2)
我想这与hover.setAttribute("class", "myarea");
有关。如果IE 8在IE 7或更低版本模式下运行,则无效。然后你必须使用hover.className = 'myarea'
(所有浏览器都支持)。
sAttrName参数需要所需内容属性的名称而不是 文档对象模型(DOM)属性。例如,在IE8模式下,在设置,获取或删除CLASS属性时,此方法不再需要sAttrName为“className”。兼容模式下的早期版本的Internet Explorer和Internet Explorer 8仍然需要sAttrName来指定相应的DOM属性名称。
http://msdn.microsoft.com/en-us/library/ms536739%28v=vs.85%29.aspx
检查IE正在运行的模式。