在 vue.js 开发中,处理用户交互(如点击、按键)是基础操作。但有时原生事件行为不够理想。这时,Vue 事件修饰符 就能轻松解决问题,它们像小助手一样直接加在事件名后面,让代码更简洁高效。以下是主要修饰符及其作用:
问题: 点击子元素时,事件会像水泡一样向上“冒”到父元素(事件冒泡),触发父元素的同类事件。
解决: 使用 @click.stop 让事件止步于当前元素。
场景: 点击按钮关闭弹窗,不希望触发弹窗后面元素的点击事件。
<div @click="parentClick">
<button @click.stop="childClick">点我</button>
</div>
<!-- 点击按钮只会触发 childClick,不会触发 parentClick -->
问题: 某些元素有默认行为,如点击链接会跳转页面,提交表单会刷新页面。
解决: 使用 @click.prevent 或 @submit.prevent 阻止这些默认动作。
场景: 单页面应用(SPA)中阻止链接跳转,表单提交前做验证。
<a href="/some-page" @click.prevent="handleLinkClick">点链接不跳转</a>
<form @submit.prevent="handleSubmit">...</form>
问题: 事件默认在冒泡阶段处理。
解决: 使用 @click.capture 让事件在捕获阶段(从父到子)就触发。
场景: 需要父元素在子元素之前处理事件(较少用)。
<div @click.capture="captureHandler">
<button @click="buttonClick">按钮</button>
</div>
<!-- 点击按钮,先触发 captureHandler,再触发 buttonClick -->
问题: 事件冒泡导致父元素响应子元素触发的事件。
解决: 使用 @click.self 确保只有点击元素本身才触发,忽略内部子元素冒泡上来的事件。
场景: 点击卡片背景才关闭卡片,点击卡片内容区域则不关闭。
<div class="card" @click.self="closeCard">
<div class="card-content">...内容区域...</div>
</div>
<!-- 点击内容区域不会触发 closeCard -->
<button @click.once="payOrder">支付</button>
<!-- "支付"函数只执行一次 -->
问题: 滚动事件处理函数中调用 event.preventDefault() 会阻塞滚动,导致卡顿。
解决: 使用 @scroll.passive 明确告诉浏览器不会阻止默认滚动行为,浏览器可以立即渲染滚动效果。
场景: 需要监听滚动事件做非阻塞操作(如埋点、懒加载)。
<div @scroll.passive="handleScroll">...</div>
问题: 需监听特定按键事件。
解决: 使用 @keyup.enter、@keyup.esc、@keyup.space 等,直接响应回车、ESC、空格等按键。
场景: 在输入框按回车提交表单。
<input type="text" @keyup.enter="submitForm" />
代码简洁: 无需在方法内写 event.stopPropagation() 或 event.preventDefault()。
逻辑清晰: 修饰符直接声明在模板里,意图明确。
功能强大: 覆盖常见事件处理需求(阻止冒泡、阻止默认、按键过滤等)。
修饰符通过点号 . 加在事件名后面(如 @click.stop)。
可以串联使用(如 @click.stop.prevent 同时阻止冒泡和默认行为)。
键盘修饰符支持按键别名(.enter, .tab, .delete, .esc, .space, .up, .down, .left, .right)或直接使用按键 key(如 @keyup.page-down)。
理解并熟练运用这些 Vue 事件修饰符,能让你更高效地处理用户交互,编写出更清晰、更易维护的 Vue 组件代码。它们是 Vue 模板语法中提升开发体验的重要工具。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!
我们都知道addEventListener() 的参数约定是:useCapture是可选参数,默认值为false,目前DOM 规范做了修订:addEventListener() 的第三个参数可以是个对象值了。passive就是告诉浏览器我可不可以用stopPropagation...
在WebApp或浏览器中,会有点击返回、后退、上一页等按钮实现自己的关闭页面、调整到指定页面、确认离开页面或执行一些其它操作的需求。可以使用 popstate 事件进行监听返回、后退、上一页操作。
具有层级关系的结构中,使用了pointer-events:none 属性将会使当前元素中的事件不会被捕获,从而实现了点穿的效果。而当代码示例中假如top元素具有子元素且显示指定pointer-events属性不为none的时候,top元素注册的事件将会被捕获/冒泡触发
事件对象 event,JavaScript 将事件event作为参数传递,IE中把 event 事件对象作为全局对象 window 的一个属性,获取鼠标在网页中的坐标 = 鼠标在视窗中的坐标 + 浏览器滚动条坐标
何为默认事件?比如 a 会跳转页面,submit 会提交表单等。普通js方法:e.preventDefault()函数。Vue.js方法: .prevent 是vue 的内置修饰符,调用了 event.preventDefault()阻止默认事件
js keyup、keypress和keydown事件都是有关于键盘的事件,当一个按键被pressed 或released在每一个现代浏览器中,都可能有三种客户端事件。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O的模型,使其轻量又高效。比如,文件操作中的fs事件流,网络编程所用到的tcp,http模块等,当你回想自己写的程序后,会发现很多操作都基于事件驱动,Events类。
在写移动端导航的时候经常用到点击按钮出现/隐藏导航条的情况,最常见的方法当然还是前端框架直接调用,省心省力,不易出错;当然还有使用纯JS实现的小代码段。我这里整理了纯CSS实现方式,给需要的人和给自己做个笔记:实现原理利用CSS伪类:target
我做的是一个table的编辑功能,当移入某行的时候展示编辑状态,在移出某行的时候显示的是原始状态,此时遇到一种情况,就是.当mousenter事件触发之后,由于鼠标移动得太快,同一个tr上绑定的mouseleave事件压根儿就没有执行。
js事件传播流程主要分三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。在我们平常用的addEventListener方法中,一般只会用到两个参数,一个是需要绑定的事件,另一个是触发事件后要执行的函数
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!