今天在写一个页面时 将一段js脚本放到<head></head>标签之间,并且在<body>里加入了onload=function()但是这样对应的function()并不执行, onload对应的事件中使用到在<body>标签后面的某个<div>标签的ID号,后来将脚本代码放到放到该<div>标签后面 代码就被执行了 想请大神解释下这是怎么回事

解决方案 »

  1.   

    window.onload = function(){
    //执行代码}
      

  2.   

    因为没怎么学过Js所以是从网上下的一个Js,下面是关键的代码请大神帮着看看,我已经改好了,只是对于为什么将JS代码放的位置不一样执行结果不一样存在疑惑。
    <body onload="slideShow()">
    <div id="gallery">
      <div id="imagearea">
        <div id="image">
          <a href="javascript:imgNav(-1)" class="imgnav " id="previmg"></a>
          <a href="javascript:imgNav(1)" class="imgnav " id="nextimg"></a>
        </div>
      </div>
      <div id="thumbwrapper">
        <div id="thumbarea">
          <ul id="thumbs">
            <li value="1"><img src="thumbs/1.jpg" width="179" height="100" alt="" /></li>
            <li value="2"><img src="thumbs/2.jpg" width="179" height="100" alt="" /></li>
            <li value="3"><img src="thumbs/3.jpg" width="179" height="100" alt="" /></li>
            <li value="4"><img src="thumbs/4.jpg" width="179" height="100" alt="" /></li>
            <li value="5"><img src="thumbs/5.jpg" width="179" height="100" alt="" /></li>
          </ul>
        </div>
      </div>
    </div><script type="text/javascript">
    var imgid = 'image';
    var imgdir = 'fullsize';
    var imgext = '.jpg';
    var thumbid = 'thumbs';
    var auto = true;
    var autodelay = 5;
    </script>
    <script type="text/javascript" src="js/slide.js"></script>
    var bxs,bxe,fxs,fxe,ys,ye,ta,ia,ie,st,ss,ft,fs,xp,yp,ci,t,tar,tarl;
    ta = document.getElementById(thumbid);
    ia = document.getElementById(imgid);
    t = ta.getElementsByTagName('li')
    ie = document.all ? true : false;
    st = 3;
    ss = 3;
    ft = 10;
    fs = 5;
    xp,yp = 0;
    document.onmousemove = getPos;function slideShow(){
      var taw = ta.parentNode.offsetWidth;
      var taa = taw / 4;
      bxs = leftPos(ta);
      bxe = bxs + taa;
      fxe = bxs + taw;
      fxs = fxe - taa;
      ys = topPos(ta);
      ye = ys + ta.offsetHeight;
      var len = t.length;
      tar = [];
      for(i=0; i < len; i++){
        var id = t[i].value;
        tar[i] = id;
        t[i].onclick = new Function("getImg('" + id + "')");
        if(i == 0) {
          getImg(id);
        }
      }
      tarl = tar.length;
    }上面这个就是在Onload事件时调用的函数,代码可能有点多,我很奇怪的是为什么只是跳动下脚本的位置到<head>标签处,onload中调用的这个函数就不执行了,恳请大神给解释下
      

  3.   

    var bxs,bxe,fxs,fxe,ys,ye,ta,ia,ie,st,ss,ft,fs,xp,yp,ci,t,tar,tarl;
    ta = document.getElementById(thumbid);
    ia = document.getElementById(imgid);
    t = ta.getElementsByTagName('li')
    ie = document.all ? true : false;
    st = 3;
    ss = 3;
    ft = 10;
    fs = 5;
    xp,yp = 0;
    document.onmousemove = getPos;
    放在head里面的时候上面的代码是肯定要报错的。
      

  4.   

    我用chrome的开发者工具查看的时候总是显示脚本错误就是下面这句t = ta.getElementsByTagName('li')请详细解释下原因可以吗
      

  5.   

    我用chrome的开发者工具查看的时候总是显示脚本错误就是下面这句t = ta.getElementsByTagName('li')请详细解释下原因可以吗放在head里面的时候,执行到这里的document.getElementById(thumbid);为空,所以你再ta.就会报错。所以下面的代码全都无效了。
      

  6.   

    我用chrome的开发者工具查看的时候总是显示脚本错误就是下面这句t = ta.getElementsByTagName('li')请详细解释下原因可以吗放在head里面的时候,执行到这里的document.getElementById(thumbid);为空,所以你再ta.就会报错。所以下面的代码全都无效了。
    为什么会这样呢?大神能把页面元素加载的顺序和脚本执行的顺序讲一下吗?为什么将脚本放到后面就可以了,难道脚本的执行时间与其出现的位置是有关系的吗?
      

  7.   

    放在head里面的时候,页面元素还没加载到,getElementById,是不可能有值的还不明白么?JS获取页面元素是完全建立在该元素已经加载完毕的基础上,。
      

  8.   

    是因为你的div还没有加载你就执行了document.getElementById(thumbid);
    html加载是从上往下加载的