事件是元素天生就具备的。所有的事件源都是对象。事件作用在谁的身上谁就是事件源

事件处理函数

  1. 绑定事件 = 绑定事件处理函数(事件的反馈)
  2. 事件 + 事件的反馈 = 前端交互 交互体验。

    绑定事件处理函数

  3. elem.onclick = function(){} 事件句柄

    1. 一个元素绑定两个相同类型的处理函数,会造成覆盖。
  4. elem.addEventListener(事件类型,事件处理函数,冒泡false/捕获true);

    1. IE9 以下不兼容。W3C规范。
    2. 同一个元素可以绑定多个事件。
      1. var oBtn = document.getElementsByTagName('button')[0];
      2. oBtn.addEventListener('click', function () {
      3. this.innerHTML = '加载中。。';
      4. }, fasle)
      5. oBtn.addEventListener('click', function () {
      6. this.innerHTML = '加载中更多事件';
      7. }, fasle)
      8. // 这两个都会执行
      1. var oBtn = document.getElementsByTagName('button')[0];
      2. oBtn.addEventListener('click', test, fasle);
      3. oBtn.addEventListener('click', test, fasle);
      4. function test() {
      5. console.log(1)
      6. }
      7. //只会执行一次因为绑定的是同一个函数引用。
  5. elem.attachEvent(事件类型,事件处理函数)

    1. IE8以及下
    2. this指向window
      1. oBtn.attachEvent('onclick', function () {
      2. test.call(oBtn);//改变this指向。
      3. })
      4. function test() {
      5. console.log(this)
      6. }

      封装

      1. function bindType(el, type, fn) {
      2. if (el.addEventListener) {
      3. el.addEventListener(type, fn, false);
      4. } else if (el.attchEvent) {
      5. el.attchEvent("on" + type, function () {
      6. fn.call(el);
      7. })
      8. } else {
      9. el['on' + type] = fn;
      10. }
      11. }

      解除事件绑定

  6. elem.onclick =null/false;

  7. elem.removeEventListener(参数要和绑定事件处理函数一摸一样)

    1. oBtn.addEventListener('click', function () {
    2. this.innerHTML = '加载中。。';
    3. //非严格模式下使用。
    4. this.removeEventListener('click', arguments.callee, false);
    5. }, fasle)
  8. elem.detachEvent(事件类型,事件处理函数);

    事件的冒泡和捕获

    标签知识补充
    行内元素嵌套

    冒泡和捕获

    DOM结构上存在着嵌套关系就会出现冒泡。

  9. 冒泡:子元素向父元素一级一级传递相同事件类型的处理函数现象

  10. 捕获:嵌套关系最顶层向子元素一级一级传递相同事件类型的处理函数现象,直到事件源。
  11. 只要点击谁 谁就是事件源 就不存在捕获或者冒泡。按照顺序执行。
  12. focus blur change submit reset select 没有冒泡
  13. 老版本IE 没有捕获。

    阻止事件冒泡

  14. W3C e.stopPropagation(). e=>Event。 此方法存在Event.prototype上,IE8 window.event

    1. oBtn.addEventListener('click', function (e) {
    2. var e = e || window.event;
    3. e.stopPropagation();
    4. }, fasle)
  15. IE e.cancalBubble = true;

    1. oBtn.addEventListener('click', function (e) {
    2. var e = e || window.event;
    3. e.cancelBubble = true;
    4. }, fasle)

    封装

    1. function cancelBubble(e) {
    2. var e = e || window.event;//兼容性写法
    3. if (e.stopPropagation) {
    4. e.stopPropagation();
    5. } else {
    6. e.cancelBubble = true;
    7. }
    8. }

    取消默认事件

  16. 取消右键菜单

    • oncontextmenu return false

      1. document.oncontextmenu = function (e) {
      2. var e = e || window.event;
      3. return false;
      4. }
    • W3C e.preventDefault() IE9不兼容.

      1. document.oncontextmenu = function (e) {
      2. var e = e || window.event;
      3. e.preventDefault();
      4. }
    • e.returnValue = false;

      1. document.oncontextmenu = function (e) {
      2. var e = e || window.event;
      3. e.returnValue = false;
      4. }
  17. 阻止a标签跳转

    1. href = ‘javascript:;’
    2. href = ‘javascript:void(0)’ return 0
    3. e.preventDefault
      1. var a = document.getElementsByTagName('a')[0];
      2. a.onclick = function (e) {
      3. e.preventDefault();
      4. }