防止事件冒泡和阻止默认事件的兼容写法

本文介绍了一种兼容多种浏览器的方法来阻止事件的传播和冒泡。通过JavaScript实现的函数可以有效地在不同浏览器环境下(如IE和其他现代浏览器)进行事件处理。

阻止事件的传播兼容

function(e){
            var e=e||window.event;
            e.stopPropagation();//阻止事件的传播(包括捕获也包括冒泡)

            // 兼容处理
            if (e.stopPropagation) {
                e.stopPropagation();
            }else{
                // IE浏览器
                e.cancelBubble=true;
            }

        }

防止事件冒泡

  //阻止冒泡事件的兼容性处理 
      function stopBubble(e) { 
        if(e && e.stopPropagation) { //非IE 
          e.stopPropagation(); 
        } else { //IE 
          window.event.cancelBubble = true; 
        } 
      } 
<think> 在Vue 3中,防止键盘事件冒泡默认行为可以通过事件修饰符或手动处理事件对象来实现。根据引用[1][2][3]的内容,以下是具体方法: ### 1. 使用事件修饰符(推荐) Vue提供内置的事件修饰符,可以直接在模板中使用: - **阻止冒泡**:`.stop`修饰符 - **阻止默认行为**:`.prevent`修饰符 **示例代码**: ```html <template> <!-- 同时阻止冒泡默认行为 --> <input @keydown.enter.stop.prevent="handleEnter" placeholder="回车不会触发冒泡默认提交" /> <!-- 单独阻止冒泡 --> <input @keyup.enter.stop="submitForm" /> <!-- 单独阻止默认行为 --> <input @keydown.space.prevent="handleSpace" /> </template> ``` ### 2. 手动处理事件对象 在事件处理函数中,通过`event`对象的方法控制: - `event.stopPropagation()`:阻止事件冒泡 - `event.preventDefault()`:阻止默认行为 **示例代码**: ```html <template> <input @keydown="handleKeyDown" /> </template> <script setup> const handleKeyDown = (event) => { if (event.key === 'Enter') { // 阻止冒泡 event.stopPropagation(); // 阻止默认行为(如表单提交) event.preventDefault(); console.log("Enter键按下,已阻止冒泡默认行为"); } }; </script> ``` ### 3. 多修饰符连用(引用[1][3]) 修饰符可以连续书写,同时实现多个功能: ```html <!-- 同时阻止冒泡默认行为 --> <input @keyup.enter.stop.prevent="handleAction" /> ``` ### 注意事项(引用[2][4]) - **事件类型选择**: - `@keydown`:适合阻止默认行为(如禁止空格键滚动页面) - `@keyup`:通常用于触发操作 - **兼容性**:`.stop``.prevent`修饰符在Vue 3中与Vue 2用法一致,无需额外调整 - **全局事件监听**:若使用`document.addEventListener`监听键盘事件,需在事件回调中手动调用`stopPropagation``preventDefault` ### 完整示例 ```html <template> <div @keydown="parentHandler"> <input type="text" @keydown.enter.stop.prevent="handleEnter" placeholder="回车不会触发父元素事件" /> </div> </template> <script setup> const parentHandler = () => { console.log("父元素键盘事件"); // 子元素使用.stop后不会触发 }; const handleEnter = (e) => { console.log("处理回车事件,已阻止冒泡默认提交行为"); }; </script> ``` ### 关键区别 | **场景** | **修饰符方案** | **手动方案** | |------------------|-----------------------------|------------------------------| | 阻止冒泡 | `@keyup.enter.stop` | `event.stopPropagation()` | | 阻止默认行为 | `@keydown.enter.prevent` | `event.preventDefault()` | | 动态条件判断 | 不支持(需手动) | 支持(可在函数内加条件判断) | | 多按键处理 | 需为每个按键单独声明 | 在函数内统一处理 | > 推荐优先使用修饰符方案,代码更简洁;复杂逻辑(如按组合键时阻止行为)用手动方案[^1][^3][^4]。 §§相关问题§§ 1. Vue 3中如何同时监听多个按键(如Ctrl+Enter)? 2. 如何为Vue组件动态绑定键盘事件? 3. Vue 3的键盘事件修饰符支持哪些特殊按键? [^1]:Vue事件处理+ Vue事件修饰符(阻止默认行为等)+Vue中的键盘事件。分析:keyup事件时:只按下ctrl键是不能触发的,必须要按下ctrl键然后再按下松开宁外一个键,才能触发。keydown事件时:只按下ctrl就可以触发。 3.Vue事件中两个技巧 1.修饰符可以连续写 eg:既阻止冒泡,又阻止默认事件 写法:eg:@click.prevent.stop [^2]:Vue——02-06 阻止事件冒泡阻止默认行为以及监听键盘回车事件。如果我们不想让其事件进行冒泡,可以使用.stop来阻止事件冒泡 [^3]:vue中如何解决冒泡默认行为。解决办法如下: 阻止冒泡:@事件类型.stop 阻止默认行为 @click.prevent [^4]:vue事件(键盘事件,鼠标事件,输入事件事件冒泡捕获。案例: <body> <div id="baat"> <h1>Hello,{{name}}</h1> <input type="text" placeholder="按下回车键" @keyup="shont"> <input type="text" placeholder="按下回车键" @keyup.enter="shont"> <input type="text" placeholder="按下回车键" @keyup.5="shont"> </div> <script type="text/javascript"> Vue.config.productionTip = false //设置为 false 以阻止 vue 在启动时生成生产提示。 Vue.config.keyCodes.enter = 5 const x = new Vue({ el: '#baat', data: { name: 'huao', }, methods: { shont(e) { // e.key键盘按键名 e.keyCode按键数字 console.log(e.key, e.keyCode) } } }); </script> </body> 鼠标事件 </think>在 Vue 3 中防止键盘事件冒泡默认行为,可以通过以下方法实现: ### 1. **使用事件修饰符(推荐方法)** [^1][^2][^3] Vue 提供了内置的事件修饰符,可直接在模板中使用: ```html <!-- 阻止事件冒泡 --> <input @keyup.enter.stop="handleEnter" /> <!-- 阻止默认行为 --> <input @keydown.space.prevent="handleSpace" /> <!-- 同时阻止冒泡默认行为 --> <input @keyup.enter.stop.prevent="handleSubmit" /> ``` ### 2. **手动处理事件对象** [^1][^4] 在事件处理函数中通过 JavaScript 控制: ```html <template> <input @keydown="handleKeyDown" /> </template> <script setup> const handleKeyDown = (event) => { if (event.key === 'Enter') { // 阻止事件冒泡 event.stopPropagation(); // 阻止默认行为(如表单提交) event.preventDefault(); console.log("已阻止冒泡默认行为"); // 执行自定义逻辑 } }; </script> ``` ### 关键区别 | **场景** | **修饰符方案** | **手动方案** | |------------------|-----------------------------|------------------------------| | 阻止冒泡 | `@keyup.enter.stop` | `event.stopPropagation()` | | 阻止默认行为 | `@keydown.enter.prevent` | `event.preventDefault()` | | 动态条件判断 | 不支持(需手动) | 支持(可在函数内加条件判断) | | 多按键处理 | 需为每个按键单独声明 | 在函数内统一处理 | ### 完整示例 ```html <template> <div @keydown="parentHandler"> <input type="text" @keydown.enter.stop.prevent="handleEnter" placeholder="回车不会触发父元素事件" /> </div> </template> <script setup> const parentHandler = () => { console.log("父元素键盘事件"); // 子元素使用.stop后不会触发 }; const handleEnter = (e) => { console.log("处理回车事件,已阻止冒泡默认提交行为"); }; </script> ``` ### 注意事项 1. **事件类型选择**: - `@keydown`:适合阻止默认行为(如禁止空格键滚动页面)[^1] - `@keyup`:通常用于触发操作 2. **修饰符链式调用**: 可以连续使用多个修饰符(如 `.stop.prevent`)[^1][^3] 3. **全局事件监听**: 使用 `document.addEventListener` 时需手动调用事件方法: ```javascript document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { e.stopPropagation(); e.preventDefault(); } }); ``` > 推荐优先使用修饰符方案,代码更简洁;复杂逻辑(如按组合键时阻止行为)用手动方案[^1][^3][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值