1.用户对页面做操作会触发事件,浏览器负责捕获到事件,javascript代码则响应事件。
2.同样的操作可能会触发不同类型的事件,这取决于上下文。比如当用户点击一个submit按钮,触发的是onsubmit事件;用户点击reset按钮,触发的则是onreset事件
3.有两类事件。第一类事件(low-level)只描述用户的动作,没有别的含义,这里事件包括onclick等。第二类事件(high-level)是有语义的,只在特定的上下文才能发生,比如onsubmit等。语义事件通常是伴随着普通事件发生的,比如说,当用户点击submit按钮,会依次触发onmousedown,onmouseup,onclick事件,然后包含该按钮的html,还会触发onsubmit事件
4.可以在html元素的attribute里定义事件处理函数,但这种方式让页面的行为和结构耦合
5.比较好的方式是对property赋值,比如
document.f1.b1.onclick=function( ) { alert('Thanks!'); };
html元素的attribute是包含javascript代码的string,而html元素对应的element object的property则是function(不包含()调用)
6.用javascript property绑定事件处理函数比起用html attribute绑定,有2个好处。1是使页面的结构和行为解耦合,2是可以动态绑定事件处理函数
7.通常来说,如果浏览器对事件的响应有某种默认行为,可以通过在事件处理函数中return false,来阻止浏览器默认行为
8.当事件处理函数被调用的时候,它是作为事件发生的元素的方法来调用的,类似于element.method(),所以事件处理函数中的this关键字,是指向事件发生的元素
9.用HTML attribute的方式定义事件处理函数时,实际上是隐性地定义了javascript function。通过这种方式定义的函数,与普通的函数有不同的scope chain。其scope chain上的第1个对象仍然是call object,但是第2个对象不再是global object,而是定义此函数的element object,然后还会向上一直延伸到document对象上,最后才是global object