最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue阻止事件冒泡和捕獲方式

 更新時(shí)間:2025年06月05日 09:26:40   作者:yujkss  
這篇文章主要介紹了vue阻止事件冒泡和捕獲方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
  • @click.stop : 阻止事件冒泡
  • @click.prevent : 阻止事件默認(rèn)行為
  • @click.self : 事件只作用在元素本身,而不是其子元素

要想了解 VUE 阻止事件冒泡和捕獲方法,首先要了解一下 JS 事件和 JS 阻止事件冒泡,捕獲方法

1、js 事件的三階段

捕獲階段

目標(biāo)階段:執(zhí)行當(dāng)前對(duì)象的事件處理程序

冒泡階段

2、js 阻止事件冒泡,捕獲

  • @click.stop : 阻止事件冒泡
  • @click.prevent : 阻止事件默認(rèn)行為
  • @click.self : 事件只作用在元素本身,而不是其子元素
<a @click.stop="doThis">阻止單擊事件繼續(xù)傳播</a>
<form @submit.prevent="onSubmit">提交事件不再重載頁(yè)面</form>
<a @click.stop.prevent="doThat">修飾符可以串聯(lián)</a>
<div @click.self="doThat">只當(dāng)在 event.target 是當(dāng)前元素自身時(shí)觸發(fā)處理函數(shù).即事件不是從內(nèi)部元素觸發(fā)的</div>

補(bǔ)充其他修飾符

  • @click.capture : 使用事件捕獲模式
  • @click.once : 事件只觸發(fā)一次 2.1.4新增
  • @scroll.passive : 告訴瀏覽器這個(gè)事件的默認(rèn)行為不會(huì)被取消 2.3.0新增
  • @keyup.enter : 按鍵修飾符,enter被按下的時(shí)候觸發(fā)
  • @click.ctrl : 系統(tǒng)修飾符,Ctrl 被按下的時(shí)候觸發(fā) 2.1.0新增
  • @click.ctrl.exact : 有且只有 Ctrl 被按下的時(shí)候才觸發(fā) 2.5.0新增
<div @click.capture="doThis">添加事件監(jiān)聽器時(shí)使用事件捕獲模式,即元素自身觸發(fā)的事件先在此處處理,然后才交由內(nèi)部元素進(jìn)行處理</div>
<a @click.once="doThis">點(diǎn)擊事件將只會(huì)觸發(fā)一次</a>
<div @scroll.passive="onScroll">scroll事件不會(huì)取消默認(rèn)的滾動(dòng)行為</div>
<input @keyup.13="submit" placeholder="只有在 keyCode 是 13 時(shí)調(diào)用 vm.submit()">
<button @click.ctrl="onClick">即使 Alt 或 Shift 被一同按下時(shí)也會(huì)觸發(fā)</button>
<button @click.ctrl.exact="onCtrlClick">有且只有 Ctrl 被按下的時(shí)候才觸發(fā)</button>
<button @click.exact="onClick">沒(méi)有任何系統(tǒng)修飾符被按下的時(shí)候才觸發(fā)</button>

使用修飾符時(shí),順序很重要,相應(yīng)的代碼會(huì)以同樣的順序產(chǎn)生。

例如:用 @click.prevent.self 會(huì)阻止所有的點(diǎn)擊,而@click.self.prevent 只會(huì)阻止元素上的點(diǎn)擊。

3、JavaScript基礎(chǔ)知識(shí):preventDefault和stopPropagation

preventDefault()事件方法

【定義】:如果事件是可取消的,則 preventDefault() 方法會(huì)取消該事件,這意味著屬于該事件的默認(rèn)操作將不會(huì)發(fā)生。

單擊“提交”按鈕,阻止其提交表

<form action="https://www.baidu.com/"  method="post">
     <input type="submit" value="登錄">
</form>

<script>
        console.log(document.forms[0]);
        document.forms[0].onsubmit =  function(){
            console.log(event);
            console.log(event.cancelable);//檢測(cè)事件是否可以取消--> Boolean
            event.preventDefault();//阻止默認(rèn)事件  單
            //return false; // 也可以阻止默認(rèn)事件
           
        }
</script>

單擊鏈接,防止鏈接跟隨 URL

<a  rel="external nofollow"  id="a">點(diǎn)我跳轉(zhuǎn)</a>

<script>
		let a = document.getElementById('a');
        a.onclick = function(){
            console.log(event);
            console.log(event.cancelable);//檢測(cè)事件是否可以取消 -->Boolean
            event.preventDefault();//阻止默認(rèn)事件
            //return false; // 也可以阻止默認(rèn)事件
        }
</script>

非所有活動(dòng)都可以取消。請(qǐng)使用 cancelable 屬性 來(lái)確定事件是否可取消。

如上面兩個(gè)示例中,其返回值為Boolean,可以取消–>true,否則為–>false

【注】preventDefault() 方法不會(huì)阻止事件通過(guò) DOM 進(jìn)一步傳播。請(qǐng)使用 stopPropagation() 方法來(lái)解決

stopPropagation()事件方法

stopPropagation() 方法防止調(diào)用相同事件的傳播

【傳播階段】傳播意味著向上冒泡到父元素或向下捕獲到子元素或元素目標(biāo)本體 三個(gè)3?? 階段

【注】添加事件(HTML屬性事件,JavaScript元素事件,addEventLisenter,attachEvent(IE))默認(rèn)都是冒泡,捕獲需要**addEventLisenter()**顯式的指定第三個(gè)參數(shù)為true(事件捕獲)

//樣式
<style>
        div {
            padding: 50px;
            background-color: rgba(255, 0, 0, 0.2);
            text-align: center;
            cursor: pointer;
        }
</style>

//HTML
	<p>Click DIV 1:</p>
    <div onclick="func2()">DIV 2
        <div onclick="func1(event)">DIV 1</div>
    </div>
    
//script
<script>
        function func1(event) {
            alert("DIV 1");
            event.stopPropagation();//阻止事件傳播
        }

        function func2() {
            alert("DIV 2");
        }
</script>

不阻止事件傳播的話,當(dāng)點(diǎn)擊DIV2時(shí),事件會(huì)繼續(xù)向上傳播,觸發(fā)父元素DIV1上的func2(),然后會(huì)繼續(xù)向上傳播,直到window對(duì)象

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Element ui導(dǎo)航欄選中背景色刷新消失的問(wèn)題

    解決Element ui導(dǎo)航欄選中背景色刷新消失的問(wèn)題

    這篇文章主要介紹了解決Element ui導(dǎo)航欄選中背景色刷新消失的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 實(shí)例分析編寫vue組件方法

    實(shí)例分析編寫vue組件方法

    在本篇文章中我們給大家總結(jié)了關(guān)于編寫vue組件的方法知識(shí)點(diǎn),有此需要的讀者們跟著學(xué)習(xí)下。
    2019-02-02
  • vue動(dòng)態(tài)修改頁(yè)面title的兩種方法

    vue動(dòng)態(tài)修改頁(yè)面title的兩種方法

    本文主要介紹了vue動(dòng)態(tài)修改頁(yè)面title的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 修改vue源碼實(shí)現(xiàn)動(dòng)態(tài)路由緩存的方法

    修改vue源碼實(shí)現(xiàn)動(dòng)態(tài)路由緩存的方法

    這篇文章主要介紹了修改vue源碼實(shí)現(xiàn)動(dòng)態(tài)路由緩存的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Vue2利用Axios發(fā)起請(qǐng)求的詳細(xì)過(guò)程記錄

    Vue2利用Axios發(fā)起請(qǐng)求的詳細(xì)過(guò)程記錄

    有很多時(shí)候你在構(gòu)建應(yīng)用時(shí)需要訪問(wèn)一個(gè)API并展示其數(shù)據(jù),做這件事的方法有好幾種,而使用基于promise的HTTP客戶端axios則是其中非常流行的一種,這篇文章主要給大家介紹了關(guān)于Vue2利用Axios發(fā)起請(qǐng)求的詳細(xì)過(guò)程,需要的朋友可以參考下
    2021-12-12
  • vue-router?導(dǎo)航完成后獲取數(shù)據(jù)的實(shí)現(xiàn)方法

    vue-router?導(dǎo)航完成后獲取數(shù)據(jù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了vue-router?導(dǎo)航完成后獲取數(shù)據(jù),通過(guò)使用生命周期的 created() 函數(shù),在組件創(chuàng)建完成后調(diào)用該方法,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì)需要的朋友可以參考下
    2022-11-11
  • Vant?UI中van-collapse下拉折疊面板默認(rèn)展開第一項(xiàng)的方法

    Vant?UI中van-collapse下拉折疊面板默認(rèn)展開第一項(xiàng)的方法

    之前做項(xiàng)目的時(shí)候,使用了Collapse折疊面板,下面這篇文章主要給大家介紹了關(guān)于Vant?UI中van-collapse下拉折疊面板默認(rèn)展開第一項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 基于Vue+element-ui 的Table二次封裝的實(shí)現(xiàn)

    基于Vue+element-ui 的Table二次封裝的實(shí)現(xiàn)

    這篇文章主要介紹了基于Vue+element-ui 的Table二次封裝的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Intellij IDEA搭建vue-cli項(xiàng)目的方法步驟

    Intellij IDEA搭建vue-cli項(xiàng)目的方法步驟

    這篇文章主要介紹了Intellij IDEA搭建vue-cli項(xiàng)目的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Vue3虛擬列表的實(shí)現(xiàn)原理與實(shí)戰(zhàn)指南

    Vue3虛擬列表的實(shí)現(xiàn)原理與實(shí)戰(zhàn)指南

    在日常開發(fā)中,我們經(jīng)常會(huì)遇到需要展示大量數(shù)據(jù)的場(chǎng)景,比如展示幾千條甚至上萬(wàn)條數(shù)據(jù)列表,如果直接將所有數(shù)據(jù)渲染到頁(yè)面中,會(huì)導(dǎo)致嚴(yán)重的性能問(wèn)題,虛擬列表正是為了解決這一問(wèn)題而誕生的技術(shù),本文將介紹虛擬列表的核心原理,并基于 Vue3 手寫一個(gè)完整的虛擬列表組件
    2026-03-03

最新評(píng)論

岑溪市| 玛纳斯县| 宝兴县| 许昌县| 乌海市| 福安市| 义马市| 镇平县| 宁化县| 南充市| 龙里县| 江永县| 伊金霍洛旗| 宜兴市| 兴山县| 盱眙县| 方正县| 沽源县| 浦县| 通道| 江达县| 梅州市| 彰化市| 富川| 高青县| 乐安县| 绥滨县| 淳安县| 浦东新区| 永登县| 开平市| 岑巩县| 玛沁县| 金川县| 隆化县| 定安县| 元江| 积石山| 隆安县| 新乡市| 屏山县|