事件碎碎念

事件分为:

1、原始事件或输入事件 与 语义事件

  • 输入事件又包括: 鼠标事件 或 键盘事件:

2、与设备有关的和与设备无关的事件

DOM 0级

  • onclick事件可以看着一个设备无关的事件,因为他并不依赖鼠标, 表单控件和超链接的键盘激活也会触发此事件

  • 可以显示调用事件句柄, 但是不是模拟事件发生时的真正状况, 而只是执行句柄函数而已。 如:

  • 调用form上的document.myform.onsubmit(); 如果onsubmit函数里面没有form.submit()的话, 就不会触发表单提交

  • 事件句柄触发时,作为发生事件元素的方法调用,在函数中,关键字this指向发生事件的元素;

DOM2级—— 向后兼容0级

  • 事件分为三个阶段: 捕获、目标节点触发、 冒泡

  • 阻止冒泡: e.stopPropagation()

  • 阻止默认行为: 默认行为在事件第三个阶段完成后才执行, 可使用e.preventDefault()阻止

  • 可以为特定对象的特定类型事件注册任意多个处理器函数

  • DOM标准不确定调用一个对象的事件处理函数的顺序, 所以不认为他们是以注册的顺序调用

  • 如果在同一个元素上多次注册了同一个处理函数, 那么第一次注册后的所有注册都将被忽略

  • e.currentTarget VS e.target <=> 当前正在处理的节点 VS 发生事件的节点

IE的事件模型【4、5、5.5、6】—— 介于0级到2级之间

  • 使用attachEvent, 只支持冒泡阶段

  • 回调函数中this指向window

  • 允许同一个事件句柄函数注册多次, 且事件发生的时候调用多次

  • e.srcElement: 发生事件的节点

  • e.cancelBubble=true,可以阻止当前事件进一步冒泡到包容层次的元素

  • e.returnValue=false 阻止默认行为

按键事件 【keydown、 keypress、 keyup】

  • 在2级的DOM事件模型中没有标准化, 且不同浏览器处理的方式也有所不同

  • 典型的按键会按序产生: keydown-> keypress –> keyup, 按键一直按下时,可能触发多个keypress(不同的操作系统和浏览器可能会有所不同, 实际在chrome中keydown、和keypress都会多次触发)

  • 在IE中, 只有当按键有一个ASCII码的时候, 即当它是一个可打印字符或者控制字符的时候, keypress才会发生, 同时IE也会认为Alt按键组合是无法打印的,所以也不会产生keypress事件

  • 不能打印的功能按键,如Backspace、Enter、Escape、 方向键、 PageUp、 PageDown、F1到F12

  • keydown事件对于功能案件来说是最有用的, 而keypress事件对于可打印案件来说是最有用的

  • 不同的浏览器发送的keyCode、charCode等也有不同, 一般情况keyCode存储较低层的虚拟按键码并和keydown事件一起发送, charCode存储了可打印的字符编码和keypress一起发送, 如果一个功能按键产生了keypress事件, 那么keyCode是0(firefox中), 另外在IE中只有一个keyCode属性,当keydown触发时他代码虚拟按键码,keypress触发时,代表字符码

  • 可使用 String.fromCharCode(‘0x57’)来将字符码转换为字符

判断特性

判断DOM标准的方法: document.implementation.hasFeature(‘Events’, ‘2.0’)

更多请参考

http://blog.chinaunix.net/uid-26672038-id-3956106.html

原文地址:https://www.cnblogs.com/mininice/p/3876302.html