原生JavaScript和Vue、小程序都是如何阻止事件冒泡的?

前言

事件冒泡,可能有些同学还不是很清楚,什么是事件冒泡?来看个简单例子。

<div onclick="alert('最外层')">
    <div onclick="alert('中间层')">
        <a id="ahref" href="http://www.javanx.cn" onclick="alert('最里层')">点击我</a>
    </div>
</div>

点击“点击我”,会依次弹出:最里层---->中间层---->最外层---->然后跳转链接,这就是事件冒泡,下面来看看如何解决这个问题

原生JavaScript和Vue、小程序都是如何阻止事件冒泡的?

JavaScript解决事件冒泡

event.stopPropagation()

$(function() {
    $("#ahref").click(function(event) {
        event.stopPropagation();
    });
});

再点击“点击我”,会弹出:最里层---->然后跳转链接

return false;

$(function() {
  $("#ahref").click(function(event) {
    return false;
  });
});

再点击“点击我”,会弹出:最里层,但不会跳转链接

event.preventDefault()

$(function() {
  $("#ahref").click(function(event) {
    event.preventDefault()
  });
});

点击“点击我”,依次弹出:最里层---->中间层---->最外层,但最后没有跳转链接

由此可以看出

event.stopPropagation()
事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转)

return false
事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)

event.preventDefault()
事件处理过程中,不阻击事件冒泡,但阻击默认行为(它只执行所有弹框,却没有执行超链接跳转)

Vue解决事件冒泡

Vue.js为v-on提供了 事件修饰符,我们只需要添加click.stop即可防止事件冒泡

<div @click="cancelSelect">
    <div class="picker_alert" @click.stop>
        <div class="ofh">
            <span @click="toRoomManagement">编辑</span>
            <span @click="confirmRoom">确定</span>
        </div>
    </div>
</div>

vue事件修饰符

.stop

.prevent

.capture

.self

.once

<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
 
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
 
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
 
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
 
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
 
<!-- 只当事件在该元素本身(比如不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>

提示:使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 @click.prevent.self 会阻止所有的点击,而 @click.self.prevent 只会阻止元素上的点击。

小程序解决事件冒泡

<view bindtap='tap'>
  <view id='5' catchtap='catTap'></view>
</view>

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

公告

喜欢小编记得点击关注哦,原创文章等你哦=>web秀

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是JS事件冒泡?在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么...
    匆匆那年_海阅读 298评论 1 1
  • 这个问题也是老生常谈了,写这篇文章的主要目的是进行下梳理,了解自己知识点的掌握程度,也希望对大家有所帮助。 在说如...
    一木_qintb阅读 4,329评论 1 4
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,568评论 1 11
  • 什么是事件冒泡? 要知道怎么阻止事件冒泡,首先我们来看一下什么是事件冒泡。 事件冒泡即在一个对象上触发某类事件(比...
    那一抹似曾相识的微笑阅读 462评论 0 0
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 3,081评论 1 10