溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Js冒泡事件阻止的方法是什么

發(fā)布時(shí)間:2022-02-08 09:32:32 來(lái)源:億速云 閱讀:116 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Js冒泡事件阻止的方法是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Js冒泡事件阻止的方法是什么”文章能幫助大家解決問(wèn)題。

一. 事件目標(biāo)

現(xiàn)在,事件處理程序中的變量event保存著事件對(duì)象。而 event.target 屬性保存著產(chǎn)生事件的目標(biāo)元素。這個(gè)屬性是 DOM API 中規(guī)定的,但是沒(méi)有被所有瀏覽器實(shí)現(xiàn) 。jQuery對(duì)這個(gè)事件對(duì)象進(jìn)行了必要的擴(kuò)大,從而在任何瀏覽器中都能夠使用這個(gè)屬性。通過(guò).target,可以肯定DOM中首先接收到事件的元素(即實(shí)際被單擊的元素)。而且,我們知道this援用的是處理事件的DOM元素,所以可以編寫以下代碼:

$(document).ready(function(){

 $('#switcher').click(function(event){

  $('#switcher .button').toggleClass('hidden');

  })

 })

$(document).ready(function(){

 $('#switcher').click(function(event){

  if(event.target==this){

  $('#switcher .button').toggleClass('hidden');

  }

  })

 })

此時(shí)的代碼確保了被單擊的元素是<div id="switcher"> ,而不是其他后代元素?,F(xiàn)在,單擊按鈕不會(huì)再折疊樣式轉(zhuǎn)換器,而單擊邊框則會(huì)觸發(fā)折疊操作。但是,單擊標(biāo)簽一樣甚么也不會(huì)產(chǎn)生,由于它也是一個(gè)后代元素。實(shí)際上,我們可以不把檢查代碼放在這里,而是通過(guò)修改按鈕的行動(dòng)來(lái)到達(dá)目標(biāo) 。

二. 停止事件傳播

事件對(duì)象還提供了一個(gè) .stopPropagation() 方法,該方法可以完全禁止事件冒泡。與 .target 類似,這個(gè)方法也是一種純 JavaScript 特性,但在跨瀏覽器的環(huán)境中則沒(méi)法安全地使用 。不過(guò),只要我們通過(guò)jQuery來(lái)注冊(cè)所有的事件處理程序,就能夠放心腸使用這個(gè)方法。

下面,我們會(huì)刪除剛才添加的檢查語(yǔ)句 event.target == this,并在按鈕的單擊處理程序中添加一些代碼:

$(document).ready(function(){

 $('#switcher .button').click(funtion(event){

  //……

   event.stopPropagation();

  })

 }) 

同之前一樣,需要為用作單擊處理程序的函數(shù)添加一個(gè)參數(shù),以便訪問(wèn)事件對(duì)象。然后,通過(guò)簡(jiǎn)單地調(diào)用 event.stopPropagation() 就能夠避免其他所有 DOM 元素響應(yīng)這個(gè)事件。這樣一來(lái),單擊按鈕的事件會(huì)被按鈕處理,而且只會(huì)被按鈕處理。單擊樣式轉(zhuǎn)換器的其他地方則可以折疊和擴(kuò)大全部區(qū)域。

三. 默許操作

如果我們把單擊事件處理程序注冊(cè)到一個(gè)錨元素,而不是一個(gè)外層的<div>上,那末就要面對(duì)另外一個(gè)問(wèn)題:當(dāng)用戶單擊鏈接時(shí),瀏覽器會(huì)加載一個(gè)新頁(yè)面。這類行動(dòng)與我們討論的事件處理程序不是同一個(gè)概念,它是單擊錨元素的默許操作。類似地,當(dāng)用戶在編輯完表單后按下回車鍵時(shí),會(huì)觸發(fā)表單的 submit 事件,在此事件產(chǎn)生后,表單提交才會(huì)真正產(chǎn)生。

如果我們不希望履行這類默許操作,那末在事件對(duì)象上調(diào)用 .stopPropagation() 方法也杯水車薪,由于默許操作不是在正常的事件傳播流中產(chǎn)生的。在這類情況下,.preventDefault() 方法則可以在觸發(fā)默許操作之前終止事件 。

提示 當(dāng)在事件的環(huán)境中完成了某些驗(yàn)證以后,通常會(huì)用到 .preventDefault()。例如,在表單提交期間,我們會(huì)對(duì)用戶是不是填寫了必填字段進(jìn)行檢查,如果用戶沒(méi)有填寫相應(yīng)字段,那末就需要禁止默許操作。我們將在第8章詳細(xì)討論表單驗(yàn)證。

事件傳播和默許操作是相互獨(dú)立的兩套機(jī)制,在兩者任何一方產(chǎn)生時(shí),都可以終止另外一方。如果想要同時(shí)停止事件傳播和默許操作,可以在事件處理程序中返回 false,這是對(duì)在事件對(duì)象上同時(shí)調(diào)用 .stopPropagation() 和 .preventDefault() 的一種簡(jiǎn)寫方式。

關(guān)于“Js冒泡事件阻止的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI