层叠组件 click事件的处理

需求背景:
点击绿色框,要跳转到Anthony这个客户的详情页面。
点击右上角开关,将这Anthony放入disabled列表里。

问题是,当我把click事件放在绿色div层,开关按钮的点击事件会失效。

image.png

问题分析,绿框里的点击事件都被div的click 事件监听并消费了。 导致开关事件的监听无效。
解决办法(方法很多,这里只说一种),将绿框和开关置于同一级层,这样他们的点击事件就是独立的。利用相对位置,来处理他们的位置问题,让他们看起来是嵌套的。

<div @click.stop.prevent="routerTo(progressBoard)" style="position:relative">
    <div>
         <h4>Anthony Hazard</h4> 其余省略
    </div>
</div>
<el-switch
                style="position: absolute; top:0; right:7%"
                v-model="value"
                active-color="#13ce66"
                inactive-color="#ff4949">
</el-switch>

而如果将开关换成button,就没这么复杂, button嵌套在div里。只要阻止按钮的点击事件冒泡即可,这里放比较完整的代码,可以感受下冒泡层级。

<div class="progress-detail d-flex" @click.stop.prevent="routerTo(progressBoard)" >
      <div class="d-flex flex-wrap ">
          <div class="col-12 d-flex px-md-0 justify-content-between">
                <h4 class="mb-0">
                      {{progressBoard.name}}
                </h4>
                <el-button @click.stop="test">cancel</el-button>
          </div>
       </div>
</div>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.事件概述 1.1 什么是事件 事件是可以被 JS 检测到的行为,实质上是一种交互操作。例如:我们可以给某按钮添...
    青年心路阅读 342评论 0 0
  • 一、事件流 1.1 事件流 事件流:从页面中接受事件的顺序 事件冒泡:即事件开始时由最具体的元素(文档中嵌套层次最...
    范小饭_阅读 1,098评论 1 9
  • 前言 JavaScript和HTML之间的交互是通过事件实现的。可以用侦听器(或处理程序)来预订事件。这种模式是设...
    番茄沙司a阅读 1,034评论 0 2
  • 事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、...
    LouisJ阅读 651评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,606评论 28 53