前端都应该了解的浏览器Dom事件、Ajax、Bom

简介: 了解的浏览器Dom事件、Ajax、Bom

0. 事件流以及事件委托机制

在如图这样一段html结构中,我们点击button,同时也是点击了div、body、以及窗口,此时需要规定事件触发的顺序。

如果直观地认为是点击了button则应该直接触发button的事件,外层div和body我们是无感知的,那么这时的事件流就是冒泡,从里向外。反之就是捕获事件流,无论点击的是什么,都先从最外层触发事件。

前者符合直觉,后者符合html结构逻辑,所以w3c规定了两者可以同时存在。

image.png

假设一段DOM结构如下:

<ul>
    <li> 1 </li>
    <li> 2 </li>
    <li> 3 </li>
</ul>

js中对body注册点击事件(也可以对ul注册点击事件)

document.body.addEventListener('click', e => {
    console.log('捕获阶段');
}, true)

document.body.addEventListener('click', e => {
    console.log('冒泡阶段');
}, false)

true表示捕获阶段触发,false表示冒泡阶段触发

如果我们为每个li赋予点击事件,会注册多个方法,但是在ul(外层父层)中只需要注册一次,利用捕获冒泡的原理,相当于每个li都能触发事件,这就是事件委托机制。

其中可通过e.target来判断和执行不同的点击结果。

1. 事件类型

并不是所有事件都会冒泡。如注册scroll事件,就不会触发冒泡。

mouseover & mouseenter 的区别就是后者不会冒泡,假设给ul设置了mouseover事件,在鼠标经过ul时理论应该触发一次事件,但是因为ul中还有li元素,鼠标每经过一个li元素就会冒泡到ul上的mouseover,造成多次触发,所以需要在li中多处理阻止冒泡,而mouseenter就不会出现这种问题。

2. css对事件的影响

  1. 我们经常会碰到类似设置半透明遮罩的需求,通常是绝对定位一个div盖在元素上方,这时遮罩div会覆盖住当前元素使得元素无法进行交互行为,通过一行css代码即可解决:
{ pointer-events: none; }
  1. 指定某个给定的区域是否允许用户操作,以及如何响应用户操作(比如浏览器自带的划动、缩放等)
{ touch-action: .... }

3. Ajax基本实现四步

function majax() {
    var xhr = new XMLHttpRequest()

    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                ...
            }
        }
    }

    xhr.open('post', '/xxx', true)
    xhr.setRequestHeader('Content-type', 'application/json;charset=UTF-8')

    var params = { ... }

    xhr.send(params)
}

4. GET与POST的区别

GET

  • 没有请求体,参数大小有限制
  • 传参局限于URL编码
  • 参数不变时,因为浏览器协调缓存原因,可能会出现304问题(解决方法请求url带随机参数)
  • 常用于做数据拉取

POST

  • 有请求体,需要设置content-type,参数大小无限制
  • 支持多种编码格式
  • 常用于做数据提交保存

5. 常见问题

什么是事件传播?

  • 事件发生时会在元素节点与根节点之间按照特定的顺序传播

什么是事件冒泡?

  • 事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

什么是事件捕获?

  • 事件按照从最不特定的事件目标到最特定的事件目标(document对象)的顺序。

stopPropagation() 和 stopImmediatePropagation() 之间有什么区别?

  • 均为阻止事件的冒泡或捕获。前者用于阻止事件传播,在事件传播的任何阶段都可以调用它。后者为阻止默认事件(如a标签submit表单等)。

如何知道是否在元素中使用了event.preventDefault()方法?

  • event.defaultpreventing 返回Boolean值来判断。

Event对象中,target和currentTarget的区别?

  • e.target 指向触发事件监听的对象,e.currentTarget 指向添加监听事件的对象。

什么是跨域,工作中如何处理跨域问题

什么情况下会自动发起options请求

使用了PUT/DELETE/CONNECT/OPTIONS/TRACE/PATCH任意一种请求类型,Content-type不属于下列之一 application/x-www-form-urlencoded、multipart/form-data、text/plain

常见的请求格式(content-type)有哪些

application/x-www-form-urlencoded 原生Form表单,提交数据会序列化转码

multipart/form-data 常见的POST数据提交的方式

application/json 序列化后的JSON字符串

text/xml 灵活轻巧xml类型

binary 二进制文件类型

相关文章
|
1月前
|
前端开发
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
|
2月前
|
XML 前端开发 JavaScript
AJAX 前端开发利器:实现网页动态更新的核心技术
**AJAX** 允许网页在不刷新的情况下更新内容,实现异步与服务器交换数据。通过JavaScript的XMLHttpRequest对象,可发送和接收数据。当用户触发事件(如点击),函数向服务器发送GET请求,服务器响应后更新指定HTML部分。AJAX并非编程语言,而是利用浏览器内置对象、JavaScript和DOM技术。核心是XMLHttpRequest对象,它有多种方法(如`open()`和`send()`)和属性(如`onreadystatechange`、`readyState`和`status`)来处理请求和响应。
62 2
AJAX 前端开发利器:实现网页动态更新的核心技术
|
5月前
|
XML 消息中间件 JavaScript
从0开始学习JavaScript--JavaScript DOM操作与事件处理
在前端开发中,DOM(文档对象模型)是一个至关重要的概念,它为JavaScript提供了一种与HTML和XML文档交互的方法。本文将深入探讨DOM的概念与作用,以及JavaScript与DOM之间的密切关系。
|
3月前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
31 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
|
13天前
|
缓存 编解码 自然语言处理
前端javascript的BOM对象知识精讲
前端javascript的BOM对象知识精讲
|
17天前
|
JavaScript
js_操作dom(委托和冒泡事件)
js_操作dom(委托和冒泡事件)
16 0
|
1月前
|
JavaScript 前端开发
深入了解 JavaScript 中的 DOM 和 BOM
深入了解 JavaScript 中的 DOM 和 BOM
20 4
|
4月前
|
JavaScript 前端开发 API
探索前端BOM API:解锁浏览器的潜力
探索前端BOM API:解锁浏览器的潜力
51 0
|
4月前
|
JSON 前端开发 安全
浏览器跨域限制:为什么浏览器不能跨域发送Ajax请求?
浏览器跨域限制:为什么浏览器不能跨域发送Ajax请求?
40 0
|
4月前
|
存储 JavaScript 前端开发
JavaScript:DOM事件
JavaScript:DOM事件
41 0