10:事件

作者: jrg陈咪咪sunny | 来源:发表于2017-12-25 20:06 被阅读56次

解释以下概念:事件传播机制、阻止传播、取消默认事件、事件代理。


1.事件传播机制、

1.事件捕获阶段:事件被从document一直向下传播到目标元素,在这过程中依次检查经过的节点是否注册了该事件的监听函数,若有则执行。(ie低版本没有捕获)

    事件处理阶段:事件到达目标元素,执行目标元素的事件处理函数.
    冒泡传播:从捕获到事件源的元素开始往父级元素进行事件冒泡,DOM0级事件中,事件绑定函数的触发都发生在冒泡阶段

2.阻止传播、
stopPropagation()取消事件进一步捕获或冒泡

3.取消默认事件、
preventDefault()取消事件默认行为
ps: a链接默认跳转;
type = sublime 默认提交
<a href="http://baid.com">baidu</a>

<script>
document.querySelector('a').onclick= function(e){
e.preventDefault() //阻止默认事件
console.log(this.href) //打印链接
if(/baidu.com/.test(this.href)){
location.href = this.href
}
}
</script>

<form action="/login">
<input type="text" name="username">
<input type="submit">
</form>

<script>
document.querySelector('form').addEventListener('submit', function(evt){
evt.preventDefault() //阻止默认事件
if(document.querySelector('input[name=username]').value === 'jirengu'){
this.submit()
}
})
</script>

4.事件代理。
实现原理是利用了浏览器的事件冒泡和事件源(target)。
在js中事件会冒泡到父级节点,所以我们可以在父级节点进行事件代理。

<ul class="container">
<li class="box">box1</li>
<li class="box">box2</li>
<li class="box">box3</li>
</ul>
<script>
function $(selector){
return document.querySelector(selector)
}

$('.container').onclick = function(e){
if(e.target.classList.contains('box')){
console.log(e.target.innerText)
}
}
</script>
事件代理.png

写一个 Demo,演示事件传播的过程,演示阻止传播的效果。


<style>
.container,
.box,
.target{
border: 1px solid;
padding: 10px;
}
</style>
<button id="btn">click</button>

<div class="container">
container
<div class="box">
box
<div class="target">target</div>
</div>
</div>

<script>

function $(selector){
return document.querySelector(selector)
}

var btn = $('#btn')
btn.onclick = function (e){
console.log(e)
}
btn.addEventListener('click', function(evt){
console.log(this)
console.log(btn)
console.log(evt.target)
})

$('.container').addEventListener('click', function(e){
console.log('contianer click.. in 捕获阶段')
}, true)
$('.box').addEventListener('click', function(e){
//e.stopPropagation()
console.log('box click.. in 捕获阶段')
}, true)
$('.target').addEventListener('click', function(e){
console.log('target click.. in 捕获阶段')
}, true)

$('.container').addEventListener('click', function(e){
console.log('contianer click.. in 冒泡阶段')
}, false)
$('.box').addEventListener('click', function(e){
//e.stopPropagation()
console.log('box click.. in 冒泡阶段')
}, false)
$('.target').addEventListener('click', function(e){
console.log('target click.. in 冒泡阶段')
}, false)


</script>

相关文章

  • 10 事件

    事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特...

  • 10:事件

    解释以下概念:事件传播机制、阻止传播、取消默认事件、事件代理。 写一个 Demo,演示事件传播的过程,演示阻止传播...

  • 面对不舒服

    事件: 大宝12月10日

  • 工作日志:别人抢单的背后---竟是不愿意承认自己比别人差。

    事件时间:9月10日 事件人物:KASD爱梅,缘易幼月 事件背景: 在9月10号有两位女性顾客(这边把它分别称为A...

  • “10·28”事件

    28日上午10时许,重庆市万州区一22路公交车在万州长江二桥桥面与小轿车发生碰撞后,坠入江中。 这件事情在社会上的...

  • node.js小记(0419)事件模块

    eventsEmitter 最好不要超过10个,以免事件泄漏 setMaxlisteners:设置事件监听的阀值 ...

  • 10.18正正日总结

    【今日三件事】 1.事件 :完成舞蹈演出 打分:10 完成情况:已完成 2.事件 :写复盘 打分:10 完成情况:...

  • Android View 事件传递阅读笔记

    基于Android 6.0.1_r10 事件来自哪里? 一般默认情况下,Android 事件传递的起点。点击事件由...

  • 野氏诡谈(1)重庆红衣男孩案

    国10大灵异事件有好几个不同的说法,我采用网上最常见的一个版本,10大事件即重庆红衣男孩案,哈尔滨猫脸老太事件,上...

  • 七、React用到的修饰器

    1、input事件会报错,因为事件合成http://billqiu.github.io/2017/10/15/ho...

网友评论

    本文标题:10:事件

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