VUE 同时监听 多个事件,safari浏览器上异常

safari浏览器上,触发 contextmenu右键 同时 会触发 click事件

google浏览器 触发 contextmenu右键 同时 不会触发 click事件

li 上 同时监听( mouseout mouseover contextmenu on:click)

<li @mouseover="overShow(item.tree_id,this)" @mouseout="outHide(item.tree_id,this)" @contextmenu.prevent.stop="open_menu($index,item.tree_id,item.path,true,$event)" v-for="(item,$index) in tree_list" :class="[{'active':item.tree_id === tree_list[0].active},{'open':item.open},{'hover': item.tree_id === tree_list[0].hover && item.tree_id != tree_list[0].active},{'changed' : item.changed}]"
v-on:click.stop="select_tree(item.tree_id,item.path)" v-on:keyup.right.stop="show_menu">
    <div class="wholerow"></div><i class="icon" :class="[{'fa fa-caret-right'  : item.child.length > 0 && !item.open},{'fa fa-caret-down'  : item.child.length > 0 && item.open}]" v-on:click.stop="child_open($index,this)"></i>
 <a class="text">
                                    {{item.name}}
                                </a>

屏幕快照 2017-12-17 下午12.10.17
clipboard.png

阅读 4.9k
3 个回答

首先:safe浏览器上是指safari浏览器吗?

我做了在线例子,表示在safari上并没有出现右击会调用click的情况 demo

建议你先做一个简单的例子,在试一下。另外事件绑定最好都用@

<div id="app">
  <button @click="onClick" @contextmenu="onContextmenu">
    click
  </button>
</div>

new Vue({
  el: '#app',
  methods: {
    onClick () {
      console.log('onClick')
    },
    onContextmenu () {
      console.log('onContextmenu')
    }
  }
})

根本还是没有解决,最后 采取 js 定时器 。

总结发现 阻止 @ contextmenu 事件向上冒泡,就会 触发 click事件

<template>
    <div class="indexContainer">
            
          <ul>
            <li @click="onClick" @contextmenu="onContextmenu($event)">
              click

              <ul>
                <li>test</li>
              </ul>
            </li>
          </ul>

    </div>
</template>

<script>
    export default {
        name: 'test',
        data() {
             return {
                 
             }
        },
        components: {
        },
        created: function() { 
        

        },
        methods: {
                 onClick () {
                 event.preventDefault();
                 console.log('onClick')
               },
               onContextmenu (event) {
                 event.preventDefault();

                 console.log('onContextmenu')
               },
               onMouseout() {
                console.log("onMouseout");
               },
               onMouseover() {
                console.log("onMouseover");
               }
        }
    }
</script>

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题