分配'onmouseover'事件处理程序

时间:2009-10-07 22:08:18

标签: javascript

请告诉我这段代码有什么问题:

 <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'事件处理程序,它是一个图像元素。它不会出于某种原因分配此事件处理程序,而只是在页面加载时执行该函数。

有什么问题?

5 个答案:

答案 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;