w3c 的方法是 e.preventDefault(),IE 則是使用 e.returnValue = false;
在支持 addEventListener() 的瀏覽器中,也能通過調(diào)用時間對象的 preventDefault() 方法取消時間的默認操作。不過,在 IE9 之前的 IE 中,可以通過設(shè)置事件對象的 returnValue 屬性為 false 來達到同樣的效果。下面的代碼假設(shè)一個事件處理程序,它使用全部的三種取消技術(shù):
[js] view plaincopy
function cancelHandler(event){
var event = event || window.event; //用于IE
if(event.preventDefault) event.preventDefault(); //標準技術(shù)
if(event.returnValue) event.returnValue = false; //IE
return false; //用于處理使用對象屬性注冊的處理程序
}
當前的 DOM 事件模型草案定義了 Event 對象屬性 defaultPrevented。
javascript 的 return false 只會阻止默認行為,而是用 jQuery 的話則既阻止默認行為又防止對象冒泡。
下面這個使用原生 JS,只會阻止默認行為,不會停止冒泡
[js] view plaincopy
<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li id='ul-a' onclick='alert("li");'><a >caibaojian.com</a></li>
</ul>
</div>
var a = document.getElementById("testB");
a.onclick = function(){
return false;
};
w3c 的方法是 e.stopPropagation(),IE 則是使用 e.cancelBubble = true
在支持 addEventListener() 的瀏覽器中,可以調(diào)用事件對象的一個 stopPropagation() 方法已阻止事件的繼續(xù)傳播。如果在同一對象上定義了其他處理程序,剩下的處理程序?qū)⒁琅f被調(diào)用,但調(diào)用 stopPropagation() 方法可以在事件傳播期間的任何時間調(diào)用,它能工作在捕獲階段、事件目標本身中和冒泡階段。
IE9 之前的IE不支持 stopPropagation() 方法。相反,IE事件對象有一個 cancleBubble 屬性,設(shè)置這個屬性為 true 能阻止事件進一步傳播。( IE8 及之前版本不支持事件傳播的捕獲階段,所以冒泡是唯一待取消的事件傳播。)
當前的 DOM 事件規(guī)范草案在 Event 對象上定義了另一個方法,命名為stopImmediatePropagation()。類似 stopPropagation(),這個方法組織了任何其他對象的事件傳播,但也阻止了在相同對象上注冊的任何其他事件處理程序的調(diào)用。
[js] view plaincopy
<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li onclick='alert("li");'>test</li>
</ul>
</div>
[js] view plaincopy
function stopHandler(event)
window.event?window.event.cancelBubble=true:event.stopPropagation();
}
以上所述上就是本文的全部內(nèi)容了,希望大家能夠喜歡。