为什么javaScript中设置DOM对象绑定事件触发的函数时普通的元素对象不需要加括号而window对象需要括号?

JavaScript017

为什么javaScript中设置DOM对象绑定事件触发的函数时普通的元素对象不需要加括号而window对象需要括号?,第1张

函数名加括号是立即执行该函数,而DOM对象绑定的事件函数是在事件条件满足(比如点击)时才需要执行的,而不是在绑定时就执行,所以不要加括号。

test.onclick=run()//这个是在test对象绑定click事件时就立即执行run函数,然后把函数的运行结果赋值给click事件,这显然是错误的

test.onclick=run//这是把run函数本身(函数也是对象)赋值给test对象的click事件,然后在click事件发生时才执行run函数,所以这是正确的

从这个意义上来说,你所谓的 window.onload=run()本意是要等window对象加载完毕后再执行run函数,但是这样写的话,run函数会立即执行(在window对象还未加载完毕就执行),多数情况下这样做是不会出什么错的(除非在run函数内要调用页面上尚未加载的DOM元素时才会出错),表面上看起来也跟window的load事件触发了没什么两样,但事实上它已经脱离了你的本意,所以也是错误的!

而 window.onload=run这个才是对的,至于你说它未执行,估计你是搞错了,在run内部加个控制台的输出或者跟踪一下你就知道它究竟有没有执行了。

楼下说得太简单了,估计提问者看不懂。

假设,你有以下DOM

<div id="dvTest">

    <div>在这下面加一个按钮</div>

</div>

然后你添加一个按钮,方法如下

function addButton(){

    var $container = $("#dvTest")

    $container.append("<a href='javascript:'>click me</a>")

}

然后,给刚加的按钮一个click事件

//你要先找到你加的这个按钮

$("#dvTest > a").click(function(){ alert('you clicked me') })

//或

$("#dvTest > a").unbind().on('click'), function(){ alert('you clicked me') })

我觉得你主要是jQuery的筛选器用得不够熟。你可以搜一下,大概看看。只要能找到控件,绑定事件都不叫事儿。