在說事件冒泡之前,我們先說說事件對象(Event)
在觸發DOM上某個事件時,會産生一個事件對象event,這個對象包含着所有事件有關的資訊(導緻事件的元素、事件的類型、與特定事件相關的資訊)
所有浏覽器都支援Event對象,但支援方式不同
IE中的事件對象:window.event
什麼是事件冒泡
即事件開始時由最具體的元素(文檔中嵌套最深的那個元素)接收,然後逐級向上傳播到較不為具體的節點
所有浏覽器都支援事件冒泡
當在span、p、div元素上各綁定一個click事件,當單擊span元素時,會依次觸發三個事件,即span、p、div元素上的click事件,這就是事件冒泡,按照DOM層次結構像水泡一樣不斷向上直至頂端
阻止事件冒泡
DOM中提供stopPropagation()方法,但IE不支援,使用event對象在事件函數中調用就行
IE中提供的是,cancelBubble屬性,預設為false,當它設定為true時,就是阻止事件冒泡,也是用event對象在事件函數中調用
jQuery中提供了stopPropagation()方法來停止事件冒泡,當需要時,隻需用用event對象來調用就行,即event.stopPropagation();
什麼是預設行為
網頁元素,都有自己的預設行為,例如,單擊超連結會跳轉...
阻止預設行為
DOM中提供preventDefault()方法來取消事件預設行為,但是隻有當cancelable屬性設定為true的事件,才可以使用preventDefault()來取消事件預設行為,使用event對象在事件函數中調用就行
IE中提供的是returnValue屬性,預設為true,當它設定為false時,就是取消事件預設行為,也是用event對象在事件函數中調用
jQuery中提供了preventDefault()方法來阻止元素的預設行為,隻需要用event對象來調用就好,即event.preventDefault()
如果想同時對事件對象停止冒泡和預設行為,可以在事件處理函數中傳回false。這是對事件對象同時調用stopPropagation()方法和preventDefault()方法的一種簡寫方式