【JavaScript-DOM重点核心】事件绑定,解除事件,DOM事件流

简介: 【JavaScript-DOM重点核心】事件绑定,解除事件,DOM事件流

前言


文档对象模型( Document Object Model ,简称DOM) , 是W3C组织推荐的处理可扩展标记语言 ( HTML或者XML )的标准编程接口。 W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式。


关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作。


创建:document.write,innerHTML,createElement


增:. appendChild,insertBefore


删:removeChild


改:


修改元素属性: srC、 href、 title等 修改普通元素内容: innerHTML,innerText 修改表单元素: value,type,disabled等 修改元素样式: style,className


查:


DOM提供的API方法: getElementByld,getElementsByTagName古老用法不太推荐


H5提供的新方法: querySelector,querySelectorAll 提倡


利用节点操作获取元素:父(parentNode),子(children),兄(previousElementSibling、 nextElementSibling)提倡


1.注册事件(绑定事件)


注册事件有两种方式:传统方式和方法监听注册方式


1.1传统方式

1.利用on开头的事件onclick


2.<button οnclick= "alert(hi~)"></button>


3.btn.onclick = function( {} 4.特点:注册事件的唯一性 5.同一个元素同一个事件只能设置一个处理函数 ,最 后注册的处理函数将会覆盖前面注册的处理函数


1.2方法监听

w3c推荐


特点:注册事件的不唯一性


使用addEventListener()方法


eventTarget.addEventListener ()方法将指定的监听器注册到eventTarget (目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数.该方法接收三个参数:


●type :事件类型字符串,比如click、mouseover , 这里不带on


●listener :事件处理函数,事件发生时,会调用该监听函数


●useCapture :可选参数,是一个布尔值,默认是false


1.3attachEvent注册事件

eventTarget.attachEvent (eventNameWithon, callback)(仅支持i9以前的,但是现在ie已经没有了)


eventTarget.attachEvent ()方法将指定的监听器注册到eventTarget (目标对象)上,当该对象触 发指定的事件时,指定的回调函数就会被执行。


该方法接收两个参数:


●eventNameWithOn :事件类型字符串,比如onclick、onmouseover ,这里要带on


●callback :事件处理函数,当目标触发事件时回调函数被调用


2.删除事件(解绑事件)



<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <script>
        var div = document.querySelectorAll('div');
        div[0].onclick = function () {
            alert('事件解绑1');
            // 传统解绑事件
            div[0].onclick = null;
        }
        div[1].addEventListener('click', fn);
        function fn() {
            alert('事件解绑2');
            div[1].removeEventListener('click', fn);
        }
    </script>
</body>


3.DOM事件流


事件流描述的是从页面中接收事件的顺序,事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流。



捕获阶段从外到内,冒泡阶段从内到外


在这里面如果是捕获阶段,应该是先弹出father再弹son,如果是冒泡阶段则相反

<body>
    <div class="father">
        <div class="son"></div>
    </div>
    <script>
        // 1.获取阶段如果addEventlistener 第三个参数是true 那么则处于获取阶段 document-> html -> body->father ->son 
        var son = document.querySelector('.son');
        son.addEventListener('click', function () {
            alert('son');
        }, true);
        var father = document.querySelector('.father');
        father.addEventListener('click', function () {
            alert('father')
        }, true);
        // 2.冒泡阶段如果addEventlistener 第三个参数是false 或者省略那么则处于冒泡阶段son ->father ->body -> html -> document
        var son = document.querySelector('.son');
        son.addEventListener('click', function () {
            alert('son');
        }, false);
        var father = document.querySelector('.father');
        father.addEventListener('click', function () {
            alert('father')
        }, false);
    </script>
</body>



注意:


1.JS代码中只能执行捕获或者冒泡其中的一个阶段。


2.onclick和attachEvent只能得到冒泡阶段。


3.addEventListener (type, listener [, useCapture] )第三个参数如果是true ,表示在事件捕 获阶段调用事件处理程序;如果是false (不写默认就是false ) , 表示在事件冒泡阶段调用事件处理 程序(这个可以得到两个阶段)。


4.有些事件是没有冒泡的,比如onblur,onfocus,onmouseenter,onmouseleave


4.事件对象


<body>
    <div>事件对象</div>
    <script>
        var div = document.querySelector('div');
        div.onclick = function (e) {
        }
        console.log(e);
        // 这个e是个形参,系统帮来设定为事件对象,不需要传递实参过去。
        // 当我们注册事件时,event 对象就会被系统自动创建,并依次传递给事件监听器(事件处理函数)。
    </script>
</body>

e 就是个事件对象写到我们侦听函数的小括号里面当形参来看事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数


事件对象是我们事件的一系列相关数据的集合跟事件相关的比信息,鼠标如鼠标点击里面就包含了鼠标的相关坐标,如果是键盘事件里面就包含的键盘事件的信息比如判断用户按下了那个键这个事件对象我们可以自己命名比如event 、evt、e事件对象也有 兼容性问题ie678通过window.event(兼容性了解即可)

目录
相关文章
|
12天前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指那些不会立即执行完毕,而是会在未来的某个时间点(比如某个操作完成后,或者某个事件触发后)才完成其执行的函数
【6月更文挑战第15天】JavaScript中的异步函数用于处理非同步任务,如网络请求或定时操作。它们使用回调、Promise或async/await。
22 7
|
10天前
|
数据采集 JavaScript 前端开发
理解并应用:JavaScript响应式编程与事件驱动编程的差异
了解JavaScript的响应式编程与事件驱动编程至关重要。事件驱动编程基于事件触发函数执行,如用户交互或系统事件。响应式编程则关注数据流变化,利用Observables自动响应更新。在爬虫代理IP的Web Scraping示例中,两者分别通过axios和rxjs显示了数据抓取的不同处理方式。掌握这两者能提升异步操作的效率和代码质量。
理解并应用:JavaScript响应式编程与事件驱动编程的差异
|
22小时前
|
JavaScript 前端开发 算法
虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。
【6月更文挑战第27天】虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。当状态改变,React不直接修改DOM,而是先构建新的虚拟DOM树。通过 diff 算法比较新旧树,找到最小变更,仅更新必要部分,提高性能,避免频繁DOM操作。虚拟DOM还支持跨平台应用,如React Native。它优化了更新流程,简化开发,并提升了用户体验。
8 1
|
1天前
|
JavaScript 前端开发
JavaScript 中的三种事件模型
JavaScript 中的事件模型主要有三种: 传统事件模型(DOM Level 0) 标准事件模型(DOM Level 2) IE 事件模型(非标准,仅限于旧版本的 Internet Explorer)
8 1
|
8天前
|
JavaScript
Vue.js中使用.self修饰符来限制事件处理程序的作用域
Vue.js中使用.self修饰符来限制事件处理程序的作用域
|
6天前
|
JavaScript 前端开发
第八篇-Javascript 事件
第八篇-Javascript 事件
14 1
|
7天前
|
JavaScript 前端开发
杨老师课堂之JavaScript悬浮事件(鼠标移入移出事件)
杨老师课堂之JavaScript悬浮事件(鼠标移入移出事件)
14 1
|
13天前
|
JavaScript 前端开发
JS的监听事件
JS的监听事件
|
2天前
|
Web App开发 移动开发 JavaScript
探索 JavaScript 宇宙:DOM与BOM的星际邂逅
探索 JavaScript 宇宙:DOM与BOM的星际邂逅
|
9天前
|
JavaScript 前端开发
JavaScript弹窗事件
JavaScript弹窗事件
12 0