Javascript错误:ie6&中需要对象IE7

时间:2011-04-20 08:23:41

标签: javascript css internet-explorer-7 internet-explorer-6

我有一个javascript函数(纪元日历),当在某些文本框上设置焦点时,它会显示日历。这在ie8,ff(我可以测试的所有版本),opera等中都可以正常工作但在ie7或之前的版本中不起作用。

如果我在一个空白的html测试页面中设置它将会起作用,所以我很确定它与我的css(由设计师提供给我)发生冲突。

我已将错误追溯到这些代码行 -

Epoch.prototype.getTop = function (element) //PRIVATE: returns the absolute Top value of element, in pixels
{
    var oNode = element;
    var iTop = 0;

    while(oNode.tagName != 'BODY') {
        iTop += oNode.offsetTop;
        oNode = oNode.offsetParent;
    }

    return iTop;
};

Epoch.prototype.getLeft = function (element) //PRIVATE: returns the absolute Left value of element, in pixels
{
    var oNode = element;
    var iLeft = 0;

    while(oNode.tagName != 'BODY') {
        iLeft += oNode.offsetLeft;
        oNode = oNode.offsetParent;        
    }

    return iLeft;
};

更具体地说,如果我删除实际的while循环,那么日历将显示OK,只是它在页面上的定位是错误的?

修改

下面的代码设置'元素'

<script type="text/javascript">

        window.onload = function() {
            var bas_cal, dp_cal, ms_cal;
            dp_cal = new Epoch('epoch_popup', 'popup', document.getElementById('<%=txtDateOfDiag.ClientID%>'));
            dp_cal = new Epoch('epoch_popup', 'popup', document.getElementById('<%=txtDOB.ClientID%>'));
        };

</script>

注意:我使用的是asp.net母版页,这就是为什么需要.ClientID

修改

进一步更新 - 我已经重新创建了这个而没有应用css(但包括设计者提供的.js文件)代码仍然可以正常工作,CSS和我的JavaScript之间肯定存在某种冲突?

2 个答案:

答案 0 :(得分:1)

这会让我相信tagName不匹配,可能是因为你有大写字母。您可以尝试while(!oNode.tagName.match(/body/i)) {

答案 1 :(得分:0)

如果添加一行调试代码会发生什么:

var oNode = element;
var iLeft = 0;  
alert(oNode);

这可能会在不同的浏览器中产生不同的结果;我认为IE可能是NULL 您可能希望查看提供“element”参数值的代码,以查看是否存在与浏览器相关的问题。