JavaScript - IE8 无效参数

9

我遇到了一个小问题,涉及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。欢迎任何反馈。 Simon


getposxgetposy是什么? - Naftali
你能把你的全部代码放到 http://jsfiddle.net 的演示中吗? - Naftali
@Simon 你应该将 hover.style 对象缓存到一个变量中(既可以减少冗余,又可以提高性能)... - Šime Vidas
检查一下你的getposx、getposy返回值,它们可能没有返回数字。 - Ruan Mendes
@Šime Vidas 听起来很有趣。你能再解释一下吗?我很想提高性能! - Simon
显示剩余3条评论
2个回答

9
如果object.width小于16
hover.style.width = object.width - 16 + "px";

如果这样做,将会产生一个带有负号的字符串,这是不合法的,因为宽度必须是非负数。

您可以通过以下方式进行修复:

hover.style.width = Math.max(object.width - 16, 0) + "px";

同样,高度也是如此。

许多浏览器会忽略无效内容,但IE在某些模式下更加严格,因此您可能只会在其他浏览器中遇到静默失败。


我正在使用IE8浏览器模式的标准。 我已解决了负宽度/高度问题,但位置设置不起作用。 代码在此处:http://jsfiddle.net/AT825/ 它有什么问题? 感谢所有至今为止提供的反馈。 - Simon
你确定 getposygetposx 没有返回 NaN 吗? - Mike Samuel
我不确定。对于 hover.style.top = getposy(object) + "px ";,IE8 调试器只显示 _无效参数_。 - Simon
@Simon,参数是什么?在调试器中,表达式getposy(object) + "px"的求值结果是什么? - Mike Samuel
它正在返回NaN。我需要实现的是获取图像的位置。这是我到目前为止所做的:http://jsfiddle.net/AT825/ 如何使它在IE8中工作? - Simon
你需要修复你的 getposxgetposy 函数,以避免返回 NaN。很可能在这些函数中你调用了 parseFloat("") - Mike Samuel

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 运行的模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接