[js]理解events
javascript中的事件分为两级:DOM level 0 与 DOM level 2。DOM level 0应该算是戏称,因为它不属于DOM标准,与DOM level 2完全不同。
在DOM level中把事件写到标签里面,例如:
<input type="button" value="Press Me" onclick="alert('thanks');">
其实这样做相当于在js中这样写:
xx.onclick=function(){alert('thanks');}
因为如果typeof input的onclick属性,结果不是String,而是function。
的确,我们更常用第二种方式定义事件。
使用DOM level0的最大好处是简单。
对于DOM level 2,则要先注册event handler,用addEventListener()函数,这一过程与level 0不同, level 0中把event handler赋值给event target的一个属性,而level 2不是。在level 2中每个target可以注册多个handler,而level 0中不行。但是,所有的实现依然把event handler function作为event target的一个方法来实现,这意味着我们依然可以用this指向事件触发元素。但是,标准里面没有规定必须这么做。标准的做法是用event.currentTarget来指向绑定事件的元素。对于每一个event handler函数,会自动传一个event参数来描述本次事件的信息。