前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原生JavaScript和Vue、小程序都是如何阻止事件冒泡的?

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

作者头像
Javanx
发布2019-09-04 16:43:30
1.4K0
发布2019-09-04 16:43:30
举报
文章被收录于专栏:web秀web秀

前言

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

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

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

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

JavaScript解决事件冒泡

event.stopPropagation()

代码语言:javascript
复制
$(function() {
    $("#ahref").click(function(event) {
        event.stopPropagation();
    });
});

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

return false;

代码语言:javascript
复制
$(function() {
  $("#ahref").click(function(event) {
    return false;
  });
});

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

event.preventDefault()

代码语言:javascript
复制
$(function() {
  $("#ahref").click(function(event) {
    event.preventDefault()
  });
});

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

由此可以看出

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

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

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

Vue解决事件冒泡

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

代码语言:javascript
复制
<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
代码语言:javascript
复制
<!-- 阻止单击事件冒泡 -->
<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 只会阻止元素上的点击。

小程序解决事件冒泡

代码语言:javascript
复制
<view bindtap='tap'>
  <view id='5' catchtap='catTap'></view>
</view>

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年11月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • JavaScript解决事件冒泡
    • event.stopPropagation()
      • return false;
        • event.preventDefault()
          • 由此可以看出
          • Vue解决事件冒泡
            • vue事件修饰符
              • .stop
              • .prevent
              • .capture
              • .self
              • .once
          • 小程序解决事件冒泡
          相关产品与服务
          云开发 CloudBase
          云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档