vue--事件--事件绑定,事件修饰符,

本文介绍了Vue.js中如何使用v-on指令进行事件绑定,并详细解释了事件修饰符的使用方法,包括.stop、.prevent、.capture等,帮助开发者更好地控制DOM事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件绑定

        可以用 v-on 指令监听DOM 事件,并在触发时运行一些 JavaScript 代码。v-on 还可以接收一个需要调用的方法名称。

<button v-on:click="greet">Greet</button>
methods: {
    greet: function (event) {
        if (event) { alert(event.target.tagName) } // `event` 是原生 DOM 事件
       }
}

        除了直接绑定到一个方法,也可以在内联 JavaScript 语句中调用方法,通过$event传递原生事件对象:

<button v-on:click="say('hi',$event)">Say hi</button>
methods: { say: function (message,event) { alert(message) } }

        由于事件绑定在vue中使用概率较大,所以这里提供了简写形式

<button @click="say('hi',$event)">Say hi</button>

事件修饰符

        在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。Vue提供了更好的方式:事件处理函数只有纯粹的数据逻辑,而不是去处理 DOM 事件细节,通过事件修饰符来完成这些细节。

 <form v-on:submit.prevent="onSubmit"></form>

常见修饰符如下

.stop    停止事件冒泡    
.prevent    阻止事件默认行为
.capture     在事件捕获阶段执行事件处理函数
.self     只当在 event.target 是当前元素自身时触发处理函数
.once     事件处理函数执行一次后解绑
.passive     滚动事件的默认行为 (即滚动行为) 将会立即触发 ,一般与scroll连用,能够提升移动端的性能

按键修饰符

一般与keyup事件类型配合使用
.enter、.tab、.delete、.esc、.space、.up、.down、.left、.right
.ctrl、.alt、.shift、.meta

鼠标修饰符

.left、.right、.middle

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="../js/vue.js"></script>
</head>

<body>
  <div id="app">
    <button @click="delHandler('1',$event)">删除</button>
    <button @click="">修改</button>
  </div>
  <script>
    let vm = new Vue({
      el: "#app",
      data: {

      },
      methods: {
        delHandler(id, e) {
          console.log(e.target);
        }
      },
      created() {

      }
    })
  </script>
</body>

</html>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="../js/vue.js"></script>
  <style>
    .outer {
      width: 400px;
      height: 400px;
      background-color: paleturquoise;
      overflow: scroll;
    }

    .inner {
      width: 200px;
      height: 600px;
      margin: 100px;
      background-color: palevioletred;
    }
  </style>
</head>

<body>
  <div id="app">
    <a href="https://www.baidu.com" @click.prevent="aClickHandler">百度一下</a>
    <div class="outer" @scroll.passive="scrollHandler" @click.self="outerClickHandler">
      outer
      <div class="inner" @click.once="innerClickHandler">
        inner
      </div>
    </div>
    <input v-model="inputVal" type="text" @keyup.enter="keyUpHandler">
  </div>
  <script>
    let vm = new Vue({
      el: "#app",
      data: {
        inputVal: ''
      },
      methods: {
        outerClickHandler(e) {
          console.log('outer', e.target, e.currentTarget);
        },
        innerClickHandler(e) {
          console.log('inner', e.target, e.currentTarget);
        },
        aClickHandler() {
          console.log('点击a标签')
          alert('123')
        },
        scrollHandler() {
          let total = 0;
          for (let i = 1; i < 1000; i++) {
            total += i
          }
          console.log(total);
        },
        keyUpHandler() {
          console.log(this.inputVal);
        }
      },
      created() {

      }
    })
  </script>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值