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);
这个办法效果一样,请问这是怎么回事?谢谢
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);
这个办法效果一样,请问这是怎么回事?谢谢
<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>
myimg.addEventListener('click', changestatus(this), false);
}
else{
myimg.attachEvent('onclick', changestatus(this));
}
执行到这就执行了,而点击没有执行changestatus 我又试了myimg.onclick=changestatus(this);
红色部分全部为函数调用语句,当然会执行了。
myimg.onclick=changestatus;
这样就不会了。
这个简单,也不用分浏览器的,LS都是正解,你那个样子写的时候就直接调用changestatus那个方法了,
也应该可以。
<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);
}();
括号除掉,
无论是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.
问题是传参..
myimg.addEventListener('click', function(){changestatus(this)}, false);
可以这样解决
myimg.attachEvent('onclick', changestatus(this)); 其实是把changestatus(this)的执行结果给onclick属性,就相当于
var temp = changestatus(this);
myimg.attachEvent('onclick', temp);
不知道这么说可否。
而且我回贴反复强调的就是onclick的本质问题。 难道不是楼主想要听的吗?
用10楼的方法是最直观可以的.其中的区别希望lz可以体会一下顺便一下, 等会搬个板凳看 sunxing007 和 jack420124 对掐 -_-