Javascript无法读取属性';文件';未定义的
我继承了其他人的网站,我正试图解决为什么基于javascript的滚动菜单在IE(兼容模式启用)之外的任何情况下都不起作用 代码通过包含的menu.js: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); }
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-noeval()
从来都不是一个好办法,但是很久以前,像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