var myimg;
myimg=document.createElement('img');
$('imgdiv').appendChild(myimg);
myimg.src='images/lampon.gif';
myimg.style.position='absolute';
myimg.style.top='100px';
myimg.style.left='200px';
if(document.addEventListener){
myimg.addEventListener('click', changestatus(this), false);
}
else{
myimg.attachEvent('onclick', changestatus(this));
}function changestatus(obj)
{
alert(obj.src);
}
我用上面的代码给一个div中动态添加一个img,并且设置它的onclick属性,本想点击的时候再让它执行,可以却
if(document.addEventListener){
myimg.addEventListener('click', changestatus(this), false);
}
else{
myimg.attachEvent('onclick', changestatus(this));
}
执行到这就执行了,而点击没有执行changestatus我又试了myimg.onclick=changestatus(this);
这个办法效果一样,请问这是怎么回事?谢谢

解决方案 »

  1.   

    myimg.attachEvent('onclick', changestatus(this)); 写成myimg.onclick=Function("changestatus(this)")
      

  2.   

      注意Function的大小写,一字之差,相隔万里
      

  3.   

    myimg.addEventListener('click', function(){changestatus(myimg)}, false); 
      

  4.   


     <script>
    var myimg; 
    myimg=document.createElement('img'); 
    document.getElementById('imgdiv').appendChild(myimg); 
    myimg.src='images/lampon.gif'; 
    myimg.style.position='absolute'; 
    myimg.style.top='100px'; 
    myimg.style.left='200px'; 
    myimg.onclick=function(){

    alert(myimg.src);

    }();</script>
      

  5.   

    if(document.addEventListener){ 
    myimg.addEventListener('click', changestatus(this), false); 

    else{ 
    myimg.attachEvent('onclick', changestatus(this)); 

    执行到这就执行了,而点击没有执行changestatus 我又试了myimg.onclick=changestatus(this);
    红色部分全部为函数调用语句,当然会执行了。
    myimg.onclick=changestatus; 
    这样就不会了。
      

  6.   


    这个简单,也不用分浏览器的,LS都是正解,你那个样子写的时候就直接调用changestatus那个方法了,
      

  7.   

    或者为myimg.addEventListener('click', function(){changestatus(this)}, false); 
    也应该可以。
      

  8.   

    HTML code 
    <script> 
    var myimg; 
    myimg=document.createElement('img'); 
    document.getElementById('imgdiv').appendChild(myimg); 
    myimg.src='images/lampon.gif'; 
    myimg.style.position='absolute'; 
    myimg.style.top='100px'; 
    myimg.style.left='200px'; 
    myimg.onclick=function(){ 
        
            alert(myimg.src); 
        
    }()
    括号除掉,
      

  9.   

    我觉得上面这么多说法都只说到了标,没有说到本。
    无论是addEventListener, attachEvent,还是myimg.onclick=function(){...}其实都是要去做一件事情,那就是给myimg的onclick属性赋值,使onclick属性指向一个function。这里就不得不说一下Function比较trick的地方了。
    function changestatus(obj) {alert(obj.src); }
    着句话实际上是创造了一个变量changestatus,它指向了一个Function对象。而你写changestatus(this)表示调用这个function. 所以无论你写
    myimg.addEventListener('click', changestatus(this), false); 
    还是myimg.attachEvent('onclick', changestatus(this)); 都是把changestatus(this)执行的结果赋值给onclick.不信你可以这么写:
    myimg.attachEvent('onclick', changestatus(this)); 
    function changestatus(obj){
        return function(){alert(myimg.src)};
    }
    ,就是你要的结果了。
    而你这么写myimg.attachEvent('onclick', changestatus); 
    function changestatus(obj){
        alert(event.srcElement.src);
    }
    也是可以的。因为这样写的意思是把changestatus赋值给'onclick'
    你写myimg.onclick = function(){alert()}也是可以的,因为这样写则构造了一个黎民函数,并且赋值给了onclick.
      

  10.   


    问题是传参..
    myimg.addEventListener('click', function(){changestatus(this)}, false); 
    可以这样解决
      

  11.   

    我上面已经说了阿,
    myimg.attachEvent('onclick', changestatus(this)); 其实是把changestatus(this)的执行结果给onclick属性,就相当于
    var temp = changestatus(this);
    myimg.attachEvent('onclick', temp); 
    不知道这么说可否。
      

  12.   

    说实话,九点钟我看到这个问题我也很感兴趣,因为在我觉得我也会这么写,但是我copy了代码运行之后就迷惑了。于是查资料,自己反复测试,想清楚了之后才回贴。整整华了40分钟,是我自己的心得,所以写下来。这里面高人辈出,哪有我卖弄的田地。
    而且我回贴反复强调的就是onclick的本质问题。 难道不是楼主想要听的吗?
      

  13.   

    原因是绑定事件时, 执行了事件. 
    用10楼的方法是最直观可以的.其中的区别希望lz可以体会一下顺便一下, 等会搬个板凳看 sunxing007 和 jack420124 对掐 -_-
      

  14.   

    有返回值,如返回true,false 该怎么弄啊