JavaScript 有三种事件模型:内联模型、脚本模型和 DOM2 模型。
input.onclick = function (evt) {
var e = evt || window.event; // 实现跨浏览器兼容获取 event 对象
alert(e);
};
内联模型:在 HTML 中把事件处理函数作为属性执行 JS 代码
在一个对象里 , 由于作用域的关系 , this 代表着离它最近的对象。 arguments
直接接收 event 对象,是 W3C 的做法, IE 不支持, IE 自己定义了一个 event 对象,直
接在 window.event 获取即可。
input.onclick = function (evt) {
var e = evt || window.event; // 实现跨浏览器兼容获取 event 对象
alert(e);
};
1. 鼠标按钮
只有在主鼠标按钮被单击时 ( 常规一般是鼠标左键 ) 才会触发 click 事件,因此检测按钮
的信息并不是必要的。但对于 mousedown 和 mouseup 事件来说,则在其 event 对象存在一
个 button 属性,表示按下或释放按钮。
只有在主鼠标按钮被单击时 ( 常规一般是鼠标左键 ) 才会触发 click 事件,因此检测按钮
的信息并不是必要的。但对于 mousedown 和 mouseup 事件来说,则在其 event 对象存在一
个 button 属性,表示按下或释放按钮。
在发生 keydown 和 keyup 事件时 , event 对象的 keyCode 属性中会包含一个代码 , 与键
盘上一个特定的键对应 。 对数字字母字符集 , keyCode 属性的值与 ASCII 码中对应小写字母
或数字的编码相同。字母中大小写不影响。
盘上一个特定的键对应 。 对数字字母字符集 , keyCode 属性的值与 ASCII 码中对应小写字母
或数字的编码相同。字母中大小写不影响。
keyCode 键码:键盘上的任意键的编码,字母不区分大小写,分号在不同浏览器间有区别。
charCode 字符编码:键盘上可以输出字符的键
IE和Opera不支持charCode
事件流
事件流是描述的从页面接受事件的顺序,当几个都具有事件的元素层叠在一起的时候 ,
那么你点击其中一个元素 , 并不是只有当前被点击的元素会触发事件 , 而层叠在你点击范围
的所有元素都会触发事件。事件流包括两种模式:冒泡和捕获。
事件冒泡 , 是从里往外逐个触发 。 事件捕获 , 是从外往里逐个触发 。 那么现代的浏览器
默认情况下都是冒泡模型,而捕获模式则是早期的 Netscape 默认情况。而现在的浏览器要
使用 DOM2 级模型的事件绑定机制才能手动定义事件流模式。
事件流是描述的从页面接受事件的顺序,当几个都具有事件的元素层叠在一起的时候 ,
那么你点击其中一个元素 , 并不是只有当前被点击的元素会触发事件 , 而层叠在你点击范围
的所有元素都会触发事件。事件流包括两种模式:冒泡和捕获。
事件冒泡 , 是从里往外逐个触发 。 事件捕获 , 是从外往里逐个触发 。 那么现代的浏览器
默认情况下都是冒泡模型,而捕获模式则是早期的 Netscape 默认情况。而现在的浏览器要
使用 DOM2 级模型的事件绑定机制才能手动定义事件流模式。
当两组程序或两个 JS 文件同时执行的时候,后面一个会把前面一个完全覆盖掉。导致前面的 window.onload 完全失效了。
二. W3C W3C W3C W3C 事件处理函数
“ DOM2 级事件 ” 定义了两个方法,用于添加事件和删除事件处理程序的操作:
addEventListener() 和 removeEventListener() 。所有 DOM 节点中都包含这两个方法,并且它
们都接受 3 个参数;事件名、函数、冒泡或捕获的布尔值 (true 表示捕获, false 表示冒泡 ) 。
“ DOM2 级事件 ” 定义了两个方法,用于添加事件和删除事件处理程序的操作:
addEventListener() 和 removeEventListener() 。所有 DOM 节点中都包含这两个方法,并且它
们都接受 3 个参数;事件名、函数、冒泡或捕获的布尔值 (true 表示捕获, false 表示冒泡 ) 。
三.IE 事件处理函数
IE 实现了与 DOM 中类似的两个方法: attachEvent() 和 detachEvent() 。这两个方法接受
相同的参数:事件名称和函数。
在使用这两组函数的时候 , 先把区别说一下 : 1.IE 不支持捕获 , 只支持冒泡 ; 2.IE 添加
事件不能屏蔽重复的函数; 3.IE 中的 this 指向的是 window 而不是 DOM 对象。 4. 在传统事
件上, IE 是无法接受到 event 对象的,但使用了 attchEvent() 却可以,但有些区别。
IE 实现了与 DOM 中类似的两个方法: attachEvent() 和 detachEvent() 。这两个方法接受
相同的参数:事件名称和函数。
在使用这两组函数的时候 , 先把区别说一下 : 1.IE 不支持捕获 , 只支持冒泡 ; 2.IE 添加
事件不能屏蔽重复的函数; 3.IE 中的 this 指向的是 window 而不是 DOM 对象。 4. 在传统事
件上, IE 是无法接受到 event 对象的,但使用了 attchEvent() 却可以,但有些区别。