2011-04-20 51 views
0

所需的I有一个JavaScript功能(日历时期)当焦点被设定在一定的文本框,其显示的日历。这在ie8,ff(所有版本,据我可以测试),歌剧等,但在ie7或以前不起作用罚款。JavaScript错误:对象在IE6&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之间必须存在某种冲突?

回答

1

这将导致我相信标记名不匹配,可能是因为你拥有了它大写。您可以尝试while(!oNode.tagName.match(/body/i)) {

+0

我原以为情况而定的问题,并曾试图在这之前,我已经RIED你的建议,但仍得到相同的错误,因为我以前... – allanmayberry88 2011-04-20 08:59:09

0

,如果你添加一行代码调试像这样发生了什么:

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

这可能会给在不同的浏览器不同的结果;我认为它可能是空的IE浏览器。
你可能想看看它提供的“元素”参数的值,看看是否有一个基于浏览器的问题上都存在的代码。

+0

您的警报说,“[对象HTMLInputElement]”我已经添加了将'元素'设置为我的问题的代码。代码在ie7中显示任何警报之前就会结束。 – allanmayberry88 2011-04-20 09:55:49