国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

preventDefault, stopPropagation, stopImmediateProp

TesterHome / 3236人閱讀

摘要:同樣是使用上面的示例,但這次我們給添加個,一個是被所有共享的,另一個是獨有的,假設(shè)這兩個對當(dāng)前網(wǎng)站的功能很重要。登場他可以阻止事件冒泡并且阻止相同事件的其他偵聽器被調(diào)用。

event事件對象有三種易混淆的方法,本文講述他們之間的區(qū)別:

Event.preventDefault()

Event.stopPropagation()

Event.stopImmediatePropagation()

綜述

首先,我們看看他們在MDN上的介紹:

preventDefault: 如果當(dāng)前event.cancelable屬性為true,則取消的當(dāng)前事件的默認(rèn)動作,但不阻止當(dāng)前事件的進(jìn)一步傳播

stopPropagation: 阻止當(dāng)前冒泡或捕獲階段的進(jìn)一步傳播

stopImmediatePropagation: 阻止調(diào)用相同事件的其他監(jiān)聽器

Event.preventDefault

我們來看一個代碼示例,當(dāng)點擊一個form中的submit按鈕時會將form提交處理,此時如果使用Event.preventDefault,就可以在點擊submit按鈕時避免表格提交。

$("#myForm").on("submit", function(e) {
    e.preventDefault(); // 什么都不會發(fā)生
});

Event.preventDefault能確保表格不會被提交,但他不能阻止來自冒泡階段的submit或點擊事件,其他兩種方法就是解決這個問題的。

Event.stopPropagation

stopPropagation 保證當(dāng)前事件不再進(jìn)一步冒泡,通過以下代碼示例說明:

$(".container").on("click", function(e) {
    console.log("container 被點擊了");
});

$(".element").on("click", function(e) {
    e.preventDefault(); // 此時鏈接不會跳轉(zhuǎn)
    console.log("element 被點擊了");
});

此時點擊鏈接,console會顯示:

"element 被點擊了"
"container 被點擊了"

這時如果添加Event.stopPropagation:

$(".container").on("click", function(e) {
    console.log("container 被點擊了");
});

$(".element").on("click", function(e) {
    e.preventDefault(); // 此時鏈接不會跳轉(zhuǎn)
    e.stopPropagation(); // 此時事件冒泡被阻止
    console.log("element 被點擊了");
});

再次點擊鏈接,會看到:

"element 被點擊了"
Event.stopImmediatePropagation

以上兩種方法已經(jīng)可以解決我們在事件處理中90%的問題,接下來介紹一種無法解決情形。
同樣是使用上面的示例,但這次我們給添加2個class,一個是被所有共享的class: item,另一個是獨有的class: element,假設(shè)這兩個class對當(dāng)前網(wǎng)站的功能很重要。

我們首先使用之前提到的Event.stopPropagation

$(".element").on("click", function(e) {
    e.preventDefault(); // 此時鏈接不會跳轉(zhuǎn)
    e.stopPropagation(); // 此時事件冒泡被阻止
    console.log("element 被點擊了");
});

$(".item").on("click", function(e) {
    console.log("item 被點擊了");
});

當(dāng)我們點擊時,將會顯示:

"item 被點擊了"
"element 被點擊了"

這個現(xiàn)象會發(fā)生是因為item與element在DOM中是被平等對待的,與之前被點擊然后冒泡到父級div不同,這次我們點擊同時觸發(fā)了item與element的事件,此時使用stopPropagation無法阻止這種事件。

stopImmediatePropagation登場~
他可以阻止事件冒泡并且阻止相同事件的其他偵聽器被調(diào)用

$(".element").on("click", function(e) {
    e.preventDefault(); // 此時鏈接不會跳轉(zhuǎn)
    e.stopImmediatePropagation(); // item的點擊事件將被阻止
    console.log("element 被點擊了");
});

$(".item").on("click", function(e) {
    console.log("item 被點擊了");
});

這里我們要注意的一點是:stopImmediatePropagation的代碼要盡量放到其他同級競爭事件代碼的上面,如上面的例子中,為了使stopImmediatePropagation起作用,我們將element的事件監(jiān)聽代碼放到了item之前!

運行最后一例中的代碼,將只會看到:

"element 被點擊了"

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93956.html

相關(guān)文章

  • preventDefault,stopPropagation,return false三者的區(qū)別

    摘要:與之順序相反的是事件捕獲。可以理解為是的升級版,除了阻止冒泡,還能阻止結(jié)束掉當(dāng)前對象未執(zhí)行的其它綁定事件方法。作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。參考文章之間的區(qū)別 逛帖子的時候看到道友發(fā)的前端面試題, preventDefault(), stopPropagation(), return false三者的區(qū)別 這三者的使用想必大家并不陌生,但是細(xì)想之下還是有可究之處。 pre...

    bladefury 評論0 收藏0
  • 白話解釋 Javascript事件preventDefault,stopPropagation及re

    摘要:如圖使用事件捕獲模式注冊事件監(jiān)聽對最外層,中間層,最內(nèi)層分別用捕獲模式注冊事件監(jiān)聽,我們上面說了,如果使用捕獲模式,那么第三個參數(shù)應(yīng)該是,否則則是冒泡模式,如果不聲明,默認(rèn)為冒泡模式。 來源: 個人博客 想必好多童鞋都有直接復(fù)制粘貼event.preventDefault() 或者event.stopPropagation() 的經(jīng)歷,但是為什么這樣做不甚了解,今天我們的目的就是要徹...

    chanjarster 評論0 收藏0
  • preventDefault()、stopPropagation()、return false 之間

    摘要:取消默認(rèn)操作,如標(biāo)簽的,時會觸發(fā),有時需要取消默認(rèn)操作。停止冒泡,的事件流和的事件流類似。是頂層元素分發(fā),底層元素,由頂層往上事件傳遞,叫冒泡。停止冒泡用等同于參考文章之間的區(qū)別 1. preventDefault 取消默認(rèn)操作,如a標(biāo)簽的href,click時會觸發(fā),有時需要取消默認(rèn)操作。 2. stopPropagation 停止冒泡,dom的事件流和android的事件流類似。a...

    warmcheng 評論0 收藏0
  • JavaScript 設(shè)計模式讀書筆記(六)——門面模式

    摘要:簡單的門面模式實例事件綁定函數(shù)門面模式的作用是將復(fù)雜的接口進(jìn)行包裝,變成一個便于使用的接口。還是以事件相關(guān)為例,事件綁定中還有兩個常用的分別是和。 門面模式是什么,與其我去用笨拙的語言去解釋,不如看下面這張圖,曾經(jīng)在網(wǎng)上很火的一張圖片,說的是一位兒子為他的爸媽設(shè)置的電腦桌面。 showImg(http://segmentfault.com/img/bVcgHm); 有了這些起好名字...

    pubdreamcc 評論0 收藏0
  • js控制文件拖拽,獲取拖拽內(nèi)容。

    摘要:在用戶拖拽文件到瀏覽器的某個元素上時,可以監(jiān)聽到與拖拽相關(guān)的事件,并對拖拽結(jié)果進(jìn)行處理,本文討論下和拖拽文件相關(guān)的一些問題,不過沒有處理太多關(guān)于兼容性的問題。其中,與拖拽文件相關(guān)的事件有文件拖拽進(jìn)文件拖拽在懸浮文件拖拽離開文件拖拽放下。 在用戶拖拽文件到瀏覽器的某個元素上時,js可以監(jiān)聽到與拖拽相關(guān)的事件,并對拖拽結(jié)果進(jìn)行處理,本文討論下和拖拽文件相關(guān)的一些問題,不過沒有處理太多關(guān)于兼...

    李世贊 評論0 收藏0

發(fā)表評論

0條評論

TesterHome

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<