为什么下面的javascript在IE6上运行正常,在IE5下运行不正常?(源码奉上)

jackiedlh 2003-09-15 11:40:41
下面是我在asp.net应用程序中用到的全部由javascript生成的页面,为什么只能在IE6上正常运行呢,没有发现使用了IE6特殊的函数与特性,
高手请帮忙,非常感谢!!

<%@ Page language="c#" Codebehind="SubMenuReg.aspx.cs" AutoEventWireup="false" Inherits="com.cbitech.SpyMis.Web.UserControl.SubMenuReg" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>SubMenuMember</title><script language="JavaScript" src="../JScript/HotImage.js"></script>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<style type="text/css"> .titleStyle{ background-color:"CornflowerBlue";color:#000000;border-top:1px solid #FFFFFF; font-size:9pt;cursor:hand; }
.contentStyle{ background-color:#efefef;color:blue;font-size:9pt; }
</style>
</HEAD>
<body>
<script language="JavaScript">
var layerTop=50; //菜单顶边距
var layerLeft=0; //菜单左边距
var layerWidth=110; //菜单总宽度
var titleHeight=20; //标题栏高度
var contentHeight=200; //内容区高度
var stepNo=10; //移动步数,数值越大移动越慢
var itemNo=0;
//建立一个名为"itemsLayer"的层,用它限制所有菜单的显示范围:
document.write('<span id=itemsLayer style="overflow:hidden;border:1px solid blue;left:'+layerLeft+';top:'+layerTop+';width:'+layerWidth+';">');
function addItem(itemTitle,itemContent){
//这个函数准备接受菜单标题和内容的写入
//新增菜单的顶点刚好在上一菜单的标题栏以下,尺寸由一开始便声明的变量决定
itemHTML='<div id=item'+itemNo+' itemIndex='+itemNo+' style="position:relative;left:0;top:'+(-contentHeight*itemNo)+';width:'+layerWidth+';">'+'<table width=100% cellspacing="0" cellpadding="0">'+'<tr><td height='+titleHeight+' onclick=changeItem('+itemNo+') class="titleStyle" align=center>'+itemTitle+'</td></tr>'+'<tr><td height='+contentHeight+' class="contentStyle">'+itemContent+'</td></tr> </table></div>';
document.write(itemHTML);
itemNo++;
}
//这时便可以把菜单标题和内容作为参数调用以上函数了:
//你可以添加任意多项,格式参照以下几行:

addItem('现场痕迹勘查','<center><a href=../RegisterWeb/TraceSurveyView.aspx" target="main">现场勘查表</a> <BR><BR><a href="../RegisterWeb/TraceSurveyInput.aspx" target="main">现场勘查登记</a><BR><BR><a href="../RegisterWeb/TraceSearch.aspx" target="main">现场勘查查询</a></center>');
addItem('痕迹鉴定','<center><a href="../RegisterWeb/TracesAuthenticate.aspx" target="main">痕迹鉴定表</a> <BR><BR><a href="../RegisterWeb/TraceAuthenInput.aspx" target="main">痕迹鉴定登记</a></center>');
addItem('痕迹串并','<center><a href="../RegisterWeb/CaseCombine.aspx"target="main">痕迹串并表</a> <BR><BR><a href="../RegisterWeb/CaseCombineSearch.aspx" target="main">痕迹串并查询</a></center>');
addItem('指纹检验','<center><a href="../RegisterWeb/FpCheckView.aspx"target="main" >指纹检验表</a><br><br><a href="../RegisterWeb/FpCheckInput.aspx" target="main">指纹检验登记</a> <br><br><a href="../RegisterWeb/FpCheckSearch.aspx" target="main">指纹检验查询</a></center>');
addItem('微痕送检','<center><a href="../DoctorWeb/MiniTraces.aspx"target="main" >微痕送检表</a><br><br><a href="../DoctorWeb/MiniTraceReg.aspx" target="main">微痕送检登记</a> <br><br><a href="../DoctorWeb/MiniTraceSearch.aspx" target="main">微痕查询</a></center>');
addItem('法医检验','<center><a href="../DoctorWeb/Doctor.aspx"target="main" >法医检验表</a><br><br><a href="../DoctorWeb/DoctorReg.aspx" target="main">法医检验登记</a> <br><br><a href="../DoctorWeb/DoctorSearch.aspx" target="main">法医检验查询</a></center>');


document.write('</span>'); //结束"itemsLayer"层

//下面一式计算"itemsLayer"层的高度:
document.all.itemsLayer.style.height =
itemNo*titleHeight+contentHeight;
//现在开始编写点击标题时移动相应的层:
//初始化变量"toItemIndex"和"onItemIndex",
//它们分别用于记录"应该显示的层"和"现在显示的层":
var toItemIndex=itemNo-1;
var onItemIndex=itemNo-1;
var runtimes=0; //"runtimes"用于记录层移动次数
//菜单标题被点击时调用这个函数:
function changeItem(clickItemIndex){
//判断相应的层应上移还是下移:
toItemIndex=clickItemIndex;
if(toItemIndex-onItemIndex>0) moveUp(); else moveDown();
//一定的时间间隔后继续移动,直到移了设定的步数stepNo:
runtimes++;
if(runtimes>=stepNo){
onItemIndex=toItemIndex;
runtimes=0;}
else
setTimeout("changeItem(toItemIndex)",10);
}
//相应菜单上移:
function moveUp(){
//判断应一起上移的菜单,并让它(们)每次移动contentHeight/stepNo的距离:
for(i=onItemIndex+1;i<=toItemIndex;i++)
eval('document.all.item'+i+'.style.top=parseInt(document.all.item'+i+'.style.top)-contentHeight/stepNo;');
}
//相应菜单下移:
function moveDown(){
for(i=onItemIndex;i>toItemIndex;i--)
eval('document.all.item'+i+'.style.top=parseInt(document.all.item'+i+'.style.top)+contentHeight/stepNo;');
}
changeItem(0); //把第一个菜单作为默认显示
//-->
</script>
<FONT face="宋体"></FONT>
</body>
</HTML>


IE6中显示的是正常的滚动菜单(有点像QQ菜单,不过没有图片),但在IE5上,菜单显示异常,有的没有主菜单项,有的菜单项重叠,没法解决呀!
有没有其他好的替代办法,有另外好的例子吗?
...全文
67 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuruhong 2003-09-17
  • 打赏
  • 举报
回复
看了代码,因为没有IE5的浏览器,只能够提出几点建议
1. document.all.item3这样的修改成document.all("item3")或者document.getElementById("item3")
2. 外头的span修改成span元素,<div id=item +i那样的元素设置style="position:absolute"

希望你好运,这里没有测试环境,所以无法帮上
liuruhong 2003-09-17
  • 打赏
  • 举报
回复
你查找一下,可能问题出现在setTimeout,msdn里头有解释的,可能用法有问题
jackiedlh 2003-09-17
  • 打赏
  • 举报
回复
好久没上来了,不好意思


问题出在下面语句:
changeItem(0); //把第一个菜单作为默认显示

注释后在IE5上正常运行!不知什么原因?

我在上海,QQ:30593998
yonghengdizhen 2003-09-16
  • 打赏
  • 举报
回复
楼主做刑事技术的啊,是广州的吗?
eva 2003-09-16
  • 打赏
  • 举报
回复
提示什么错误呢?


尽管没看清搂主的代码,但看到演示效果非常好
josua 2003-09-16
  • 打赏
  • 举报
回复
其实可以把最后生成的客户端页面贴出来。这样多累啊。
jiaminxy 2003-09-15
  • 打赏
  • 举报
回复
有耐性看完楼主帖子的人,乃牛人.............
jackiedlh 2003-09-15
  • 打赏
  • 举报
回复
我是这个页面放在框架中,可能跟框架有关,谁知道呢??
sw47 2003-09-15
  • 打赏
  • 举报
回复
用了ie没有的属性被,程序加注释一大堆,晕了
jackiedlh 2003-09-15
  • 打赏
  • 举报
回复
:-(

87,988

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧