请告诉我这段代码有什么问题:
<script type="text/javascript" >
function createimg()
{
var img = new Image();
img.src='link/to/image';
img.alt='Next image'; img.id = 'span1'; img.style.zIndex = 10;
img.style.position = 'absolute'; img.style.display='block'; img.style.top = '130px';
img.style.padding='10px'; img.style.left='440px'; img.className ='dynamicSpan';
document.body.appendChild(img);
return img;
}
function al()
{
alert('loaded');
}
a = createimg();
a.onmouseover = al();
</script>
具体到最后一部分,我试图分配a的'onmouseover'事件处理程序,它是一个图像元素。它不会出于某种原因分配此事件处理程序,而只是在页面加载时执行该函数。
有什么问题?
贝
答案 0 :(得分:14)
a.onmouseover = al;
当您编写al()
时,您正在现场调用该函数并将该函数的返回值(由于没有return
语句而未定义)分配给{ {1}}。相反,你想要分配函数本身,所以你只需要删除括号。
答案 1 :(得分:2)
嗯,对于初学者来说,你的代码的格式不是那么容易阅读的。
但你的问题在这里:
a.onmouseover = al();
你真正想要的是:
a.onmouseover = al;
()
运算符调用函数。因此表达式al()
等于执行函数al
的结果 - 这意味着al
函数必须在其结果之前执行(在这种情况下,{{1} }})可以分配给undefined
。
相比之下,如果您只使用a.onmouseover
,则表达式等于函数对象 al
,这是您实际要分配给事件的内容。在这种情况下,当触发事件时,将执行al
功能。
答案 2 :(得分:0)
尝试
a.onmouseover = al;
而不是
a.onmouseover = al();
答案 3 :(得分:0)
a.onmouseover = al;
答案 4 :(得分:0)
替换:
a.onmouseover = al();
使用:
a.onmouseover = al;