事件对象

163 阅读3分钟

事件对象

事件的兼容(侦听和删除侦听)

ie9以上

  • 添加事件:element.addEventListener(‘事件类型,事件回调函数,(是否捕获时触发))

    • 拓展:

      • 1、事件只执行一次 div.addEventListener("click",clickHandler,{once:true})
      • 2、事件执行指定次数 加一个变量,判断变量的次数
  • 移除事件:element.removeEventListener(‘事件类型,事件回调函数,(是否捕获时触发))

ie8及以下

  • 添加事件:element.attachEvent(‘on开头的事件名’,事件函数名)

    • 注:只有两个参数,没有第三个参数
  • 移除事件:element.detachEvent(‘on开头的事件名’,事件函数名)

兼容写法

  • 添加

    • function addEventListen(elem,type,callback){ try{ elem.addEventListener(type,callback) }catch(e){ elem.attachEvent("on"+type,callback); } }
  • 删除

    • function removeEventListen(elem,type,callback){ try{ elem.removeEventListener(type,callback) }catch(e){ elem.detachEvent("on"+type,callback); } }

各种绑定方法对比

addEventListener

  • 优点

    • 支持捕获和冒泡阶段分开侦听
    • 支持事件抛发机制
    • 支持同一个事件做多个事件回调函数
    • 事件使用时可以将函数与内容完全分离
  • 缺点

    • 不支持IE8及以下
    • 方法名太长

attachEvent

  • 优点

    • 支持IE8以下
    • 可以使一个事件调用多个回调函数
    • 事件使用时可以将函数与内容完全分离
  • 缺点

    • IE8以上不支持
    • 没有捕获
    • 不支持一次点击
    • 未来被淘汰

onclick=fn

  • 优点

    • 全浏览器支持,不考虑兼容问题
    • 代码便捷
  • 缺点

    • 不支持事件抛发机制,只能使用系统默认事件
    • 同一个元素同一个事件不支持多个回调函数
    • 代码大量使用匿名函数,容易造成回调地狱
    • 在开发中代码和代码实际功能不能分离
  • 拓:onclick的删除

    • 元素.onclick = null;

e事件内容(对象)

回调函数不能设置参数 只能系统默认传参

e.type

  • 事件类型(例:click)

e.target 、e.srcElement

  • 事件目标对象

e.currentTarget this

  • 事件侦听对象

e.cancalBubble

  • 设置取消冒泡

Event事件

change

  • 失去焦距触发

    • 只能针对表单触发

    • input 如果input.value值发生改变,并且失去焦距触发

    • select select.value是选中的值

      • 如果想要增加多选 multiple,要得到值需用select中的name
      • select.selectedOptions 被选择多个元素 select.selectedOptions[i].textContent
      • select.selectedIndex 选择下标

error

  • 加载出错的事件

    • load 和error 用于图片的加载,Ajax通信以及JSON或者其他文件的加载等
    • 任何内容没有放在页面中不能调用clientWidth,offsetWidth,scrollWidth这样的数据

load

  • 加载成功的事件

    • load还可以用于window加载创建完成

    • 使用window,侦听load事件

      • 1、所有的DOM加载完成
      • 2、所有的图片已经加载完成

reset

  • 把表单中的元素重置为它们的默认值

submit

  • 把表单数据提交到 Web 服务器
  • 注:submit和reset只能针对form表单侦听,不能针对input

resize

  • 调整元素的尺寸
  • 针对window和textArea的事件

select

  • input文本选择文字时触发

unload

  • 卸载(现在用不到了)

scroll

  • 滚动滚动条时触发

popstate事件

  • 历史记录被回退和前进时触发

阻止默认事件

DOM中:

  • event.preventDefault() 阻止默认行为

IE中: (兼容写法)

  • event.returnValue=false 返回值=false

XMind: ZEN - Trial Version