问题描述:   一个ASP页面下(目前尚未连接数据库,还处于纯静态模式),在火狐里不报错,在IE6和8中都报错,说"document.getElementById("num"+i).className="current";"这里缺少对象,还有就是什么对象为空。   自己找了很久也没找到解决方法,特来求助,请高手们帮忙分析分析!==================================================================
ASP页面下,引用JS代码:<script type="text/javascript" src="js/common.js"></script>
JS/cmn.js脚本文件全部的代码如下:<!--
keepstatus();
function keepstatus(){
  window.status="welcome! - Ver1.1(2010.12.24) -";
  setTimeout("keepstatus()",1);
}
//-->
function linkurl(obj)
{
  if(obj.selectedIndex>0)
  { 
window.open(obj.options[obj.selectedIndex].value);
  }
}

function correctPNG() 
{
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])
    if ((version >= 5.5) && (document.body.filters)) 
    {
       for(var j=0; j<document.images.length; j++)
       {
          var img = document.images[j]
          var imgName = img.src.toUpperCase()
          if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
          {
             var imgID = (img.id) ? "id='" + img.id + "' " : ""
             var imgClass = (img.className) ? "class='" + img.className + "' " : ""
             var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
             var imgStyle = "display:inline-block;" + img.style.cssText 
             if (img.align == "left") imgStyle = "float:left;" + imgStyle
             if (img.align == "right") imgStyle = "float:right;" + imgStyle
             if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
             var strNewHTML = "<span " + imgID + imgClass + imgTitle
             + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
             + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
             + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
             img.outerHTML = strNewHTML
             j = j-1
          }
       }
    }    
}
if(window.attachEvent){
window.attachEvent("onload", correctPNG);
}else if(window.addEventListener){
window.addEventListener("load",correctPNG,true);
}else{
window["onload"]=correctPNG;
}var MaxImg = 6;
var NowImg = 1;
var bStart = 0;
var bStop =0; 
var begin;
function initialization(){
bStop =0;
var next = NowImg + 1;
if(next == MaxImg+1){
NowImg = MaxImg;
next = 1;
}  
if(bStop != 1){
if(bStart == 0){
bStart = 1;
begin = setTimeout('initialization()', 2000);
return;
}
else{
document.getElementById("desc" + next).style.display="";
document.getElementById("desc" + NowImg).style.display="none";
for (var i=1;i<7;i++){
  document.getElementById("num"+i).className="link";
if(i == next){
   document.getElementById("num"+i).className="current";
}
    while(next==7){
document.getElementById("num").className="link";
}
}
if(NowImg == MaxImg) 
NowImg = 1;
else
NowImg++;
}
begin = setTimeout('initialization()', 2000);
}
}function showit(x){
bStop=1;
clearTimeout(begin);
for (var i=1;i<=6;i++){
document.getElementById("desc" + i).style.display="none";
document.getElementById("num" + i).className="link";
if(i == x){
document.getElementById("desc" + i).style.display="block";
document.getElementById("num"+i).className="current";
}
}
}function playit(){
begin = setTimeout('initialization()', 2000);
}
begin = setTimeout('initialization()', 2000);

解决方案 »

  1.   

    还有个问题,
    CSS排版在火狐中很正常,到IE下,就出现了一个大约3PIX的间隙,不知道怎么解决
      

  2.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <style type="text/css">
            .old
            {
                background-color: Gray;
            }
            .current
            {
                background-color: Red;
            }
        </style>
    </head>
    <body>     
        <div id="Div1" class="old">
           The original color is Gray.
        </div>
        <div id="num5" class="old">
            Js changed the color to Red.
        </div>    
        <script type="text/javascript">
            var i = 5;
            document.getElementById('num' + i.toString()).className = 'current';
        </script>
    </body>
    </html>
      

  3.   

    1.把JS引用后置,IE从上到下顺序加载,首先加载JS,没有找到HTML元素,对象为空。
    2.双引号改成单引号
    document.getElementById(‘num’+i.toString()).className='current';
      

  4.   

    那个三像素问题可以利用css样式来hack下 、IE6里面你可以加上“_”来hack  IE7用“*”火狐“!important”
      

  5.   

    会不会是这个对象 document.getElementById("num"+i).className="current" 此时真的还没有创建?即 document.getElementById("num"+i) 不存在?我猜,是还没有来得及创建时,就执行了这一行代码;
      

  6.   


     这个是IE6的一个BUG   需要用HACK解决了
      

  7.   


    谢谢您的回复。按照这方法改后,还是报错,说document.getElementById(...)为空,或者不是对象
      

  8.   

    、、应该不是这个问题。ie6的那个著名的3像素问题,是指有在同一行浮动的两个层在一起的时候,纵向之间会有3个像素的间隙而我这个,是上下的两个DIV之间有间隙