最近遇到一個需求,在一定情況下,需要阻斷blur的事件傳播。搜索之后找到三個函數,第一個是preventDefault,第二個是stopPropagation,第三個是stopImmediatePropagation 。
preventDefault:
語法是:
event.stopPropagation();
這個函數的作用是阻止事件進一步冒泡,進而被其他節點接收。
preventDefault:
語法是:
event.preventDefault();
這個函數與前者不同在於他阻止的是事件默認的動作,但是並不會阻止事件的繼續傳播。例如<a>標簽的click默認的動作是打開鏈接。但是使用這個函數之后會阻止這個動作。但同時這個事件可以傳播給這個標簽或者原遠的click listener. 但是這個函數只支持cancelable的事件。可以通過event.cancelable來檢查。同時在事件的任一階段調用這個函數意味着默認的動作都不會執行。
參考:https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault
stopImmediatePropagation:
語法:
event.stopImmediatePropagation();
這個函數用於阻斷同一element的事件傳播。 例如一個element上定義了多個listener,如果其中一個調用這個方法后面的listener則都不會執行。
另外,還有return false,這種方式確實可以阻止事件默認行為的執行,例如form的submit,但是有的人提到這個辦法還包含其他內容例如退出循環等等,所以顯得不夠靈活。
最后,我的需求是監聽window.blur的,所以,只能先於原有的監聽器的前面先執行判斷,條件滿足則執行stopImmediatePropagation 來阻止它傳遞到頁面的監聽器。