Javascript无法读取属性';文件';未定义的

Javascript无法读取属性';文件';未定义的,javascript,html,css,Javascript,Html,Css,我继承了其他人的网站,我正试图解决为什么基于javascript的滚动菜单在IE(兼容模式启用)之外的任何情况下都不起作用 代码通过包含的menu.js: function goMenu(m,n){ if(n){ showMenu(m); }else{ hideMenu(m,n); } } function showMenu(m) { for(i=0;i<6;i++){ if (i!=m){ hideMenu(i); }

我继承了其他人的网站,我正试图解决为什么基于javascript的滚动菜单在IE(兼容模式启用)之外的任何情况下都不起作用

代码通过包含的menu.js:

function goMenu(m,n){
 if(n){
  showMenu(m);
 }else{
  hideMenu(m,n);
 }
}

function showMenu(m) {
   for(i=0;i<6;i++){
      if (i!=m){
         hideMenu(i);
      }
   }

   if(document.all){
      eval('document.all.menu'+m+'.style.visibility="visible"');
   }else{
      eval('document.menuSpan.document.menu'+m+'.visibility="show"');
   }
}

function hideMenu(m) {
   if(document.all){
      eval('document.all.menu'+m+'.style.visibility="hidden"');
   }else{
      eval('document.menuSpan.document.menu'+m+'.visibility="hide"');
   }
}

我尝试过在menu.js中调整代码,但没有效果。有Javascript经验的人能告诉我是什么使这段代码能够在最新的浏览器上工作吗?如果有的话?

我猜这是来自
document.menuSpan.document
操作之一<代码>文档。菜单栏可能未定义。它不是任何API的一部分。

你为什么要在这里使用
eval()
而不是直接使用代码?
document.menuSpan.document
你正试图从
menuSpan
引用
document
。。。。这不仅仅是评估-为什么这里有层?这是为了支持netscape o_0吗?哦,我为你感到很抱歉。没有人应该继承这种代码,没有人。您可以做的最好的事情可能是阅读“JavaScript:thegoodparts”或类似的内容。这段代码充满了使用JavaScript编码时要避免的反模式。它还有一大堆不推荐的东西,应该可以适应1998年的浏览器。@JeremyMiller-no
eval()
从来都不是一个好办法,但是很久以前,像
if(document.all)
这样的代码是一种标准做法。
<SPAN ID="menu0" ONMOUSEOUT="goMenu(0,0);" ONMOUSEOVER="goMenu(0,1);">
     <LAYER ONMOUSEOUT="goMenu(0,0);">
     ...
     </LAYER>
</SPAN>
From IE:
Unable to get property 'document' of undefined or null reference

From Chrome:
Uncaught TypeError: Cannot read property 'document' of undefined