這篇文章主要介紹了JS傳播事件、取消事件預設行為、阻止事件傳播,透過事件處理程式的回傳值呼叫順序講解了詳細的過程,對JS有興趣的朋友可以參考下這篇文章
1.事件處理程序的回傳值
通常情況下,回傳值false就是告訴瀏覽器不要執行這個事件相關的預設操作。例如,表單提交按鈕的onclick事件處理程序能透過返回false阻止瀏覽器提交表單,再如a標籤的onclick事件處理程序透過返回false阻止跳轉href頁面。類似地,如果使用者輸入不合適的字符,輸入域上的onkeypress事件處理程序能透過返回false來過濾鍵盤輸入。
事件處理程序的回傳值只對透過屬性註冊的處理程序才有意義。
2.呼叫順序
文檔元素或其他物件可以為指定事件類型註冊多個事件處理程序。當適當的事件發生時,瀏覽器必須依照下列規則呼叫所有的事件處理程序:
透過設定物件屬性或HTML屬性註冊的處理程序一直優先呼叫。
使用addEventListener()註冊的處理程序依照它們的註冊順序呼叫。
使用attachEvent()註冊的處理程序可能會按照任何順序調用,所以程式碼不應該依賴調用順序
3.事件傳播
在呼叫在目標元素上註冊的事件處理函數後,大部分事件會「冒泡」到DOM樹根。呼叫目標的父元素的事件處理程序,然後呼叫在目標的祖父元素上註冊的事件處理程序。這會一直到Document對象,最後到達Window物件。
發生在文件元素上的大部分事件都會冒泡,值得注意的例外是focus、blur和scroll事件。文檔元素的load事件會冒泡,但它會在Document物件上停止冒泡而不會傳播到Window物件。只有當整個文件都載入完畢時才會觸發Window物件的load事件。
4.取消事件預設行為、阻止事件傳播
在支援addEventListener()的瀏覽器中,可以透過呼叫事件物件的preventDefault()方法取消事件的預設操作。在IE9之前的IE中,可以透過設定事件物件的returnValue屬性為false達到相同的效果。以下一段程式碼是結合三種技術取消事件:
function cancelHandler(event){ var event=event||window.event;//兼容IE //取消事件相关的默认行为 if(event.preventDefault) //标准技术 event.preventDefault(); if(event.returnValue) //兼容IE9之前的IE event.returnValue=false; return false; //用于处理使用对象属性注册的处理程序 }
取消事件相關的預設操作只是事件取消中的一種,我們也能取消事件傳播。在支援addEventListener()的瀏覽器中,可以呼叫事件物件的stopPropagation()方法以阻止事件的繼續傳播。如果在同一物件上定義了其他處理程序,則剩下的處理程序將依舊被調用,但調用stopPropagation()之後任何其他物件上的事件處理程序將不會被調用。
IE9之前的IE不支援stopPropagation()方法,而是設定事件物件cancelBubble屬性為true來實現阻止事件進一步傳播。
好了以上就是小編為大家整理的全部內容啦,希望對大家有幫助~
相關推薦:
##############################################################以上是JS傳播事件、取消事件預設行為、阻止事件傳播詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!