2@click events for 1 html element using vue.js 3

zlhcx6iw  于 2023-10-23  发布在  Vue.js
关注(0)|答案(3)|浏览(105)

我想绑定两个鼠标点击事件到一个div字段。其中一个是Shift+单击,另一个是常规单击,例如。

<div @click.shift="aaa()" @click="bbb()">...</div>

问题是,当我在div上按下shift+click时,不仅会执行bbb(),还会执行bbb()。我试着用了一些修饰语,例如。@click.shift.stop或类似的方法,但是bbb()在我点击div的所有时间都被执行。我怎么能解决这个问题,而不分离2种点击事件在一个单一的功能,例如。ccc()调用bbb()或bbb()?

xxslljrj

xxslljrj1#

你要找的是“精确”修饰语。

<div @click.shift="aaa()" @click.exact="bbb()">...</div>

https://vuejs.org/guide/essentials/event-handling.html#exact-modifier
.exact修饰符允许控制触发事件所需的系统修饰符的精确组合。
所以这个click事件只有在使用NO修饰符时才会触发,当@click.shift被触发时,它不会被执行。请注意,这也将阻止alt+click,cnc +click等。

jjhzyzn0

jjhzyzn02#

我会这样做,添加一个单击处理程序,它将相应地调度事件。

new Vue({
  el: '#app',
  methods: {
    aaa() {
      console.log('aaa() executed!');
    },
    bbb(event) {
      if (!event.shiftKey) {
        console.log('bbb() executed!');
      }
    }
    ccc(event){
      if (event.shiftKey) {
        this.aaa(event);
      }else{
        this.bbb(event);
      }
    }
  }
})
div {

        background-color: green;
        padding: 20px;

      }
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

    <div id="app">
      <div @click="ccc($event)">Click me!</div>
    </div>
nbnkbykc

nbnkbykc3#

new Vue({
  el: '#app',
  methods: {
    aaa() {
      console.log('aaa() executed!');
    },
    bbb(event) {
      if (!event.shiftKey) {
        console.log('bbb() executed!');
      }
    }
  }
})
div {

        background-color: green;
        padding: 20px;

      }
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

    <div id="app">
      <div @click.shift="aaa()" @click="bbb($event)">Click me!</div>
    </div>

希望这有帮助!

相关问题