跳至主要內容

JavaScript 中的 DOM 事件

星火燎原@vxhly大约 2 分钟webJavaScriptjQuery

前言

这篇文章主要介绍了 JavaScript 中 DOM 0 级事件和 DOM 2 级事件的区别介绍。

DOM 0 级事件

写在标签里

<a href="#" id="main" onclick="fn();fn1();">
  <button type="button">this is button</button>
</a>

如上所示, 把 onclick 写在标签内, 都是 DOM 0 级事件, 方法 fn 和 fn1 依次执行

绑定事件

var ele = document.getElementById("main");
ele.onclick = function () {
  console.log("做第一件事");
};

这也是 DOM 0 级事件方法, 我们需要用 XXX.onYYY=ZZZ 这种形式来绑定事件, 当点击元素时, 会输出 "做第一件事" , 恩, 很理想。

接下来, 当我们希望在点击该元素的时候再做另一件事怎么办呢?下面这样:

ele.onclick = function () {
  console.log("做第二件事");
};

这样肯定不行, 因为我们是希望点击时既输出 “做一件事” , 又要输出 “做第二件事” 。而这样的话后面的方法将前面的覆盖掉了, 因为 XXX.onYYY=ZZZ 只能给元素的某个事件类型(如例子中的 click 事件)绑定一个方法 ZZZ ;这个问题难不到我们, 既然这样, 那我们就把要做的事情全都放在 ZZZ 里不就行了么;

function fn1() {
  console.log("做第一件事");
}

function fn2() {
  console.log("做第二件事");
}
ele.onclick = function () {
  fn1();
  fn2();
};

dom 2 级事件

jQuery 绑定事件

$("#hash").click(function () {
  alert("jQuery 的 DOM 2 级点击第一次");
});
$("#hash").click(function () {
  alert("jQuery 的 DOM 2 级点击第二次");
});

提示

通过 jQuery 方法来绑定事件, 不会覆盖之前方法体里写的事件。

JavaScript 绑定事件

btn.addEventListener(
  "click",
  function () {
    alert("原生 DOM 2 级第一次 click");
  },
  false
);
btn.addEventListener(
  "click",
  function () {
    alert("原生 DOM 2 级第二次click");
  },
  false
);

提示

通过原生的 JavaScript 方法来绑定事件, 会覆盖之前方法体里写的事件。

DOM 0 级和 DOM 2 级共存

<a href="#" id="hash" onclick="fn();fn1();">
  <button type="button">返回上面进行开通</button>
</a>

<script type="text/javascript">
  function fn() {
    alert("ade");
  }

  function fn1() {
    alert("ade111");
  }
  var btn = $("#hash").get(0);
  btn.onclick = function () {
    alert("111");
  };
  $("#hash").click(function () {
    alert("jQuery 的 DOM 2 级点击第一次");
  });
  btn.addEventListener(
    "click",
    function () {
      alert("原生 DOM 2 级第一次 click");
    },
    false
  );
</script>

上面的例子有一个两个 DOM 0 级和两个 DOM 2 级绑定事件, js 里面写的 DOM 0 级会覆盖行内的 fn 和 fn1 方法, 但是 js 里面的 DOM 0 可以和 dom2 共存。

打赏
给作者赏一杯咖啡吧
您的支持将是我继续更新下去的动力
微信微信
支付宝支付宝