日期:2014-05-16  浏览次数:20553 次

请教一个 JS 为元素加“事件”的问题

<!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=utf-8" />
        <title>提取事件</title>
    </head>
    
    <body>
     <input id="anNiu" type="button" value="按钮" />

<script type="text/javascript">
function dianJi()
{
alert('abc');
}

// dianJi 不加括号可以正常运行
document.getElementById('anNiu').onclick = dianJi;

// dianJi 加括号,一刷新就弹出 alert,并且怎么点击按钮都没有反应
//document.getElementById('anNiu').onclick = dianJi();
        </script>
    </body>
</html>


为什么把不带括号的函数名赋给点击事件就正常运行。

而把带括号的函数名赋给点击事件,不仅点击按钮无效,还在载入页面时弹出 alert ?

困惑啊,请教给位一下,先谢谢各位。
------解决方案--------------------

http://www.quirksmode.org/js/events_tradmod.html
这里有点解释:
看这段
No parentheses!

Please note that in the registration of an event handler you do not use parentheses (). The onclick method expects to be assigned an entire function. If you’d do

element.onclick = doSomething();
the function would be executed and its result would be registered to onclick. This is not what we want, we want the function to be executed when the event takes place. In addition the function has usually been written to expect an event and if we’d execute it without any such context it would get terribly confused and produce JavaScript errors.

Instead we copy the function doSomething() to the event handler in its entirety. We do not execute it yet, that should only happen when the event actually takes place.

加了括号就不光是注册event了,会执行他,然后把结果注册给event。
至于怎么把结果给注册到event上,这个结果是什么,希望大神们补充吧,我还没搞懂
------解决方案--------------------
引用:
http://www.quirksmode.org/js/events_tradmod.html
这里有点解释:
看这段
No parentheses!

Please note that in the registration of an event handler you do not use parentheses (). The onclick method expects to be assigned an entire function. If you’d do

element.onclick = doSomething();
the function would be executed and its result would be registered to onclick. This is not what we want, we want the function to be executed when the event takes pl