我有一个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之间肯定存在某种冲突?
答案 0 :(得分:1)
这会让我相信tagName不匹配,可能是因为你有大写字母。您可以尝试while(!oNode.tagName.match(/body/i)) {
答案 1 :(得分:0)
如果添加一行调试代码会发生什么:
var oNode = element;
var iLeft = 0;
alert(oNode);
这可能会在不同的浏览器中产生不同的结果;我认为IE可能是NULL 您可能希望查看提供“element”参数值的代码,以查看是否存在与浏览器相关的问题。