摘要:與之順序相反的是事件捕獲??梢岳斫鉃槭堑纳?jí)版,除了阻止冒泡,還能阻止結(jié)束掉當(dāng)前對(duì)象未執(zhí)行的其它綁定事件方法。作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。參考文章之間的區(qū)別
逛帖子的時(shí)候看到道友發(fā)的前端面試題,
preventDefault(), stopPropagation(), return false三者的區(qū)別
這三者的使用想必大家并不陌生,但是細(xì)想之下還是有可究之處。
preventDefault()阻止元素在瀏覽器中的默認(rèn)行為
網(wǎng)站 $("#link").click(function(event){ event.preventDefault(); // 阻止了a鏈接href的訪問或跳轉(zhuǎn) })stopPropagation()
事件冒泡:當(dāng)一個(gè)元素上的事件被觸發(fā)時(shí),比如鼠標(biāo)點(diǎn)擊了一個(gè)按鈕,同樣的事件將會(huì)在該按鈕元素的所有父級(jí)/祖先元素上觸發(fā)。這一個(gè)過程就被稱為事件冒泡。它是由子級(jí)元素先觸發(fā),父級(jí)元素后觸發(fā),由內(nèi)而外(由下往上)的一個(gè)流程。與之順序相反的是事件捕獲。
事件捕獲:父級(jí)元素先觸發(fā),子級(jí)元素后觸發(fā),在此僅做了解。
事件冒泡例子
阻止對(duì)象綁定的剩余的事件處理函數(shù)方法的執(zhí)行,并阻止當(dāng)前事件的冒泡。
可以理解為stopImmediatePropagation是stopPropagation的升級(jí)版,除了阻止冒泡,還能阻止結(jié)束掉當(dāng)前對(duì)象未執(zhí)行的其它綁定事件方法。
jQuery中一個(gè)對(duì)象可以綁定多個(gè)事件方法,執(zhí)行順序會(huì)按照綁定的先后順序來執(zhí)行
return false$("body").click(function(event){ // body 點(diǎn)擊 console.log("body"); }); $("#inner").click(function(event){ // #inner 點(diǎn)擊 console.log("#inner"); }) $("#btn").click(function(event){ // 第一個(gè)#btn點(diǎn)擊 e.stopImmediatePropagation(); console.log("#btn 1"); }) $("#btn").click(function(event){ // 第二個(gè)#btn點(diǎn)擊 console.log("#btn 2") }) // 最終輸出 "#btn 1" // (因?yàn)閟topImmediatePropagation阻止了#btn綁定的剩余未執(zhí)行的事件方法,并且阻止了冒泡) // 如果不使用stopImmediatePropagation, 將輸出 "#btn 1" "#btn 2" "#inner" "body" 同個(gè)對(duì)象執(zhí)行順序按綁定順序執(zhí)行,冒泡則由內(nèi)向外執(zhí)行stopImmediatePropagation()例子
“return false” 相信不少同學(xué)會(huì)用來阻止元素在瀏覽器中的默認(rèn)行為,
拿它當(dāng)preventDefault()使用,但其實(shí)“return false”做的事情不僅僅只是阻止默認(rèn)行為
當(dāng)調(diào)用“return false”時(shí),它執(zhí)行了以下三件事情
event.preventDefault()
event.stopPropagation()
停止回調(diào)函數(shù)執(zhí)行并立即返回
1,2點(diǎn)還好理解,那么第3點(diǎn)是怎么回事?
return語句會(huì)終止函數(shù)的執(zhí)行并返回函數(shù)的值。所以不管是否返回false或是其它值,return語句后面的代碼都不會(huì)執(zhí)行。而返回false,使它具備了preventDefault和stropPropagation的功能
$("a").click(function(){ return false; // return false直接返回了,并不會(huì)執(zhí)行alert alert("我沒有被彈出來"); }) // preventDefault 和 stopPropagation 并不會(huì)阻止回調(diào)函數(shù)的執(zhí)行總結(jié)
很多jQuery教程在代碼演示中用“return false”來阻止執(zhí)行瀏覽器的默認(rèn)行為。
久而久之,很多同學(xué)習(xí)慣濫用“return false”來代替preventDefault
大多數(shù)情況下,我們僅僅是想要它執(zhí)行跟preventDefault的功能而已,但它卻自作主張地幫你執(zhí)行了另外兩步操作。
比較好的編程習(xí)慣是,需要用到該事件方法再去調(diào)用,否則應(yīng)該避免冗余事件的執(zhí)行。
就像prevnetDefault完成它該有的工作,并不會(huì)阻止父節(jié)點(diǎn)繼續(xù)處理事件,使得代碼更加靈活,更易于維護(hù)。
日常開發(fā)中還是要慎用“return false”,除非你同時(shí)需要preventDefault和stopPropagation,并且確定你的回調(diào)函數(shù)執(zhí)行完成后調(diào)用,那么你可以使用“return false”,否則還是用preventDefault 或 stopPropagation 更好些。
作者:以樂之名
本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。轉(zhuǎn)載請(qǐng)指明出處。
參考文章:《preventDefault()、stopPropagation()、return false 之間的區(qū)別》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85129.html
摘要:如圖使用事件捕獲模式注冊(cè)事件監(jiān)聽對(duì)最外層,中間層,最內(nèi)層分別用捕獲模式注冊(cè)事件監(jiān)聽,我們上面說了,如果使用捕獲模式,那么第三個(gè)參數(shù)應(yīng)該是,否則則是冒泡模式,如果不聲明,默認(rèn)為冒泡模式。 來源: 個(gè)人博客 想必好多童鞋都有直接復(fù)制粘貼event.preventDefault() 或者event.stopPropagation() 的經(jīng)歷,但是為什么這樣做不甚了解,今天我們的目的就是要徹...
摘要:歡迎光臨小弟博客我的博客原文中的各種區(qū)別小節(jié)參考普通添加事件和事件綁定的事件監(jiān)聽與捕獲和冒泡和的區(qū)別 相信大家在DOM的實(shí)際開發(fā)與學(xué)習(xí)過程中,肯定也遇到不少需要比較的東西,這里我主要列比較以下幾點(diǎn),更多的區(qū)別和總結(jié),希望想到和遇到的朋友給我留言哦。 clientHeight/scrollHeight/offsetHeight defer vs async 事件模型-捕獲/目標(biāo)/冒泡...
摘要:取消默認(rèn)操作,如標(biāo)簽的,時(shí)會(huì)觸發(fā),有時(shí)需要取消默認(rèn)操作。停止冒泡,的事件流和的事件流類似。是頂層元素分發(fā),底層元素,由頂層往上事件傳遞,叫冒泡。停止冒泡用等同于參考文章之間的區(qū)別 1. preventDefault 取消默認(rèn)操作,如a標(biāo)簽的href,click時(shí)會(huì)觸發(fā),有時(shí)需要取消默認(rèn)操作。 2. stopPropagation 停止冒泡,dom的事件流和android的事件流類似。a...
摘要:區(qū)分三類坐標(biāo)屏幕坐標(biāo)可視窗口坐標(biāo)頁面坐標(biāo)有時(shí)不能迅速的對(duì)應(yīng)起來,為了更好的區(qū)分三者,特意畫了一張圖如下屏幕坐標(biāo)顧名思義,即整個(gè)電腦屏幕上任意一點(diǎn)的位置坐標(biāo),對(duì)應(yīng)的屬性分別為,范圍如上圖最外層紅色邊框范圍,坐標(biāo)為藍(lán)色虛線對(duì)應(yīng)的坐標(biāo)。 區(qū)分三類坐標(biāo) 屏幕坐標(biāo)、可視窗口坐標(biāo)、頁面坐標(biāo)有時(shí)不能迅速的對(duì)應(yīng)起來,為了更好的區(qū)分三者,特意畫了一張圖如下: showImg(https://segme...
摘要:但是通過添加的匿名函數(shù)無法移除,最好是在其他地方定義事件處理程序的函數(shù),然后將該函數(shù)的名稱傳給第二個(gè)參數(shù)。一中的事件對(duì)象對(duì)象兼容級(jí)和級(jí)的瀏覽器將對(duì)象傳入到事件處理程序中。 一、事件流 假設(shè)有如下HTML代碼: Event Click me 其DOM樹如下圖所示:showImg(https://segmentfault.com/img/bVUUWA?w=50...
閱讀 2900·2019-08-30 15:55
閱讀 2009·2019-08-30 14:02
閱讀 1248·2019-08-29 15:23
閱讀 1014·2019-08-29 11:27
閱讀 468·2019-08-26 11:43
閱讀 3196·2019-08-26 10:32
閱讀 1261·2019-08-23 14:41
閱讀 3304·2019-08-23 14:41