美文网首页前端技术前端知识
浏览器中事件的触发顺序

浏览器中事件的触发顺序

作者: 一俢 | 来源:发表于2019-02-05 08:50 被阅读12次

在浏览器中,同一个 DOM 元素可以绑定多个事件,这些事件并不是同时触发的,它们的触发是有顺序的,并且和浏览器本身的实现有关,不同的浏览器事件的顺序不一样。

PC 端浏览器

我们试图在浏览器中运行如下 JS,来测试一下事件触发的顺序:

<script>
window.onload = function(){
    var btn = document.getElementById("btn");
    btn.onfocus = function() {
        console.log("onfocus");
    };
    btn.onmouseover = function() {
        console.log("onmouseover");
    };
    btn.onmousedown = function() {
        console.log("onmousedown");
    };
    btn.onmouseout = function() {
        console.log("onmouseout");
    };
    btn.onmouseup = function() {
        console.log("onmouseup");
    };
    btn.onclick = function() {
        console.log("onclick");
    };
    btn.onblur = function() {
        console.log("onblur");
    };
};
</script>

在 Chrome 中执行顺序如下:

  • onmouseover
  • onmousedown
  • onfocus
  • onmouseup
  • onclick
  • onmouseout
  • onblur

Mobile 端浏览器

由于 Mobile 端增加了touch事件,这样我们需要把脚本做下修改,增加和 touch 相关的事件:

<script>
window.onload = function(){
    var btn = document.getElementById("btn");
    btn.onfocus = function() {
        console.log("onfocus");
    };
    btn.onmouseover = function() {
        console.log("onmouseover");
    };
    btn.ontouchstart = function() {
        console.log("ontouchstart");
    };
    btn.ontouchcancel = function() {
        console.log("ontouchcancel");
    };
    btn.ontouchend = function() {
        console.log("ontouchend");
    };
    btn.ontouchmove = function() {
        console.log("ontouchmove");
    };
    btn.onmousedown = function() {
        console.log("onmousedown");
    };
    btn.onmouseout = function() {
        console.log("onmouseout");
    };
    btn.onmouseup = function() {
        console.log("onmouseup");
    };
    btn.onclick = function() {
        console.log("onclick");
    };
    btn.onblur = function() {
        console.log("onblur");
    };
};
</script>

在 iOS 的 safari 中执行顺序如下:

  • ontouchstart
  • ontouchend
  • onmouseover
  • onmousedown
  • onfocus
  • onmouseup
  • onclick
  • onblur

相关文章

  • 浏览器中事件的触发顺序

    在浏览器中,同一个 DOM 元素可以绑定多个事件,这些事件并不是同时触发的,它们的触发是有顺序的,并且和浏览器本身...

  • 事件冒泡和事件捕获

    一、冒泡型事件 事件按照从最精确的对象到最不精确的对象的顺序触发。不同浏览器的顺序有所不同。IE 5.5: div...

  • 第十四章 表单脚本

    1.有的浏览器会在触发表单的submit事件之前触发click事件,而有的浏览器则相反。对于先触发click事件的...

  • js 事件流

    事件流 Click Me 冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标的顺序触发。触发的顺序是:di...

  • JavaScript事件03——事件对象

    大纲:事件对象(DOM中的事件对象,IE中的事件对象,跨浏览器) 一、事件对象 什么是事件对象? 在触发DOM上的...

  • javascript:深入理解事件流

    事件流 定义:1.事件流描述的是从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序。2.事件就是用户或浏览器...

  • js 冒泡事件、捕获事件

    冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。顺序:div -> ...

  • 如何阻止事件冒泡和默认行为?

    1.背景介绍 浏览器的事件发生顺序 浏览器的事件发生顺序分为事件冒泡与事件捕获,分别由微软和网景公司提出。 事件冒...

  • 如何阻止事件冒泡和默认行为?

    1.背景介绍 浏览器的事件发生顺序 浏览器的事件发生顺序分为事件冒泡与事件捕获,分别由微软和网景公司提出。 事件冒...

  • 2019-11-04 JS 事件冒泡和捕获

    联系: 都是事件触发时序的问题绑定事件方法(addEventListener)的第三个参数是控制事件触发顺序的;默...

网友评论

    本文标题:浏览器中事件的触发顺序

    本文链接:https://www.haomeiwen.com/subject/siomsqtx.html