繁体   English   中英

Javascript错误:ie6和ie7中需要对象

[英]Javascript error: Object Required in ie6 & ie7

我有一个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之间是否存在某种冲突?

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

如果添加以下调试代码,会发生什么情况:

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

这可能在不同的浏览器中产生不同的结果。 我认为对于IE可能为NULL。
您可能需要看一下提供'element'参数值的代码,以查看是否存在与浏览器有关的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM