我的想法是为了减少每次在IMG中都增加onload事件,就在window.onload中直接批量给img绑定事件
但是却无法成功,假如改成对onmouseover事件的绑定却是成功的。代码如下function suckerfish(type, tag, parentId) 
{
  if (window.attachEvent) 
  {
     window.attachEvent("onload", function() 
 {
      var sfEls = (parentId==null)?document.getElementsByTagName(tag):document.getElementById(parentId).getElementsByTagName(tag);
      type(sfEls);
     });
  }
   else window.addEventListener("load",function()
{
var sfEls = (parentId==null)?document.getElementsByTagName(tag):document.getElementById(parentId).getElementsByTagName(tag);
type(sfEls);
},false);
}
 sfOnload = function(sfEls) 
 {
  for (var i=0; i<sfEls.length; i++) 
  {
  sfEls[i].onload=function() 
  {
alert(123);
  }
     }
 }
 suckerfish(sfOnload,'img','123');最后,假如在<img onload='show(this)'/>手动绑定也是可以的。
苦思半天找不到答案,希望各位大侠解答。

解决方案 »

  1.   

    window.onload 时, 图片都全部 load 完了
    这时候再绑 图片的 onload 有意义么
      

  2.   

    lz可以在下面这个方法中绑定var onReady=function(readyCall) {
    if(document.addEventListener)
    document.addEventListener("DOMContentLoaded",function() {
    document.removeEventListener("DOMContentLoaded",arguments.callee,false);
    readyCall();
    },false);
    else if(document.attachEvent) {//for IE
    if(document.documentElement.doScroll && window.self==window.top) {
    (function() {
    try {
    document.documentElement.doScroll("left");
    }catch(ex) {
    setTimeout(arguments.callee,5);
    return;
    }
    readyCall();
    })();
    }else {//maybe late but also for iframes
    document.attachEvent("onreadystatechange",function() {
    if(document.readyState==="complete") {
    document.detachEvent("onreadystatechange", arguments.callee);
    readyCall();
    }
    });
    }
    }
    }
    onReady(function() {
    //加上你上面的代码,如果不需要在iframe中运行,可以将上面方法中最后一个else去掉
    });
      

  3.   

    楼主,onload通常都是在对象加载完成的时候被触发,所以,window.onload会在整个文档被加载完毕后触发,这里的加载完毕说的是,图片和所有对象加载完毕,而img的 onload事件呢,当然就是这个图片本身被加载完毕了,所以这个顺序是所有的img的onload事件完了,以及页面其他元素加载完毕后,window的onload触发了,所以你这样写是看不出效果来的,呵呵。
      

  4.   

    window.onload 无法控制 img.onload 
    需要2楼这样的 处理 不过好象也不够完美
      

  5.   

    我刚才试了下,IE的是可以了,但是在ff中img的onload事件同样无法执行 - -
    回答的话另外给分。。不过你必须教我如何给你分 - -
      

  6.   

    我测试了可以的,你看下:<!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>   
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />   
    <title>无标题文档</title>     
    </head>   
    <body>    
        <div id="div1">
    <p>1楼wcwtitxu 说的不错</p>
            <img src="http://avatar.profile.csdn.net/6/D/1/2_sohighthesky.jpg"/>
            <img src="http://avatar.profile.csdn.net/A/6/8/2_wcwtitxu.jpg"/>
        </div>   
    </body>
    <script type="text/javascript">
    var onReady=function(readyCall) {
        if(document.addEventListener)
            document.addEventListener("DOMContentLoaded",function() {
                document.removeEventListener("DOMContentLoaded",arguments.callee,false);
                readyCall();
            },false);
        else if(document.attachEvent) {//for IE
            if(document.documentElement.doScroll && window.self==window.top) {
                (function() {
                    try {
                        document.documentElement.doScroll("left");
                    }catch(ex) {
                        setTimeout(arguments.callee,0);
                        return;
                    }
                    readyCall();
                })();
    }
        }
    }
    onReady(function() {
    var imgs=document.getElementsByTagName("img");
    var len=imgs.length;
    for(var i=0;i<len;i++) {
    //IE8,FF3.5,chrome3.0下测试通过,(这里不能加类似alert("a");的语句,因为会阻止js的这个线程,但是不会阻止图片加载,等点确定图片就加载完了)
    (function(img){
    img.onload=function() {alert(this.src)}
    })(imgs[i]);
    }
    });
    ////给分就算了,只有提问题才能给分,下次提问多给点分就行了
    </script> 
    </html>