国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Js冒泡事件詳解及阻止示例

2024-05-06 16:03:04
字體:
供稿:網(wǎng)友
如果某元素定義了事件A,如click事件,如果觸發(fā)了事件之后,沒有阻止冒泡事件,那么事件將向父級元素傳播

Js冒泡機(jī)制是指如果某元素定義了事件A,如click事件,如果觸發(fā)了事件之后,沒有阻止冒泡事件,那么事件將向父級元素傳播,觸發(fā)父類的click函數(shù)。
如下例所示:

復(fù)制代碼 代碼如下:


<html>
<script type="text/javascript" src="jquery-1.7.1.js"></script>
<script>
function ialertdouble(e) {
alert('innerdouble');
stopBubble(e);
}

function ialertthree(e) {
alert('innerthree');
stopBubbleDouble(e);
}

function stopBubble(e) {
var evt = e||window.event;
evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡
}

function stopBubbleDouble(e) {
var evt = e||window.event;
evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡
evt.preventDefault();//阻止瀏覽器默認(rèn)行為,這樣鏈接就不會跳轉(zhuǎn)
}

$(function() {
//方法一
//$('#jquerytest').click(function(event) {
// alert('innerfour');
// event.stopPropagation();
// event.preventDefault();
//});

//方法二
$('#jquerytest').click(function() {
alert('innerfour');
return false;
});
});
</script>
<div>without
<div>middle
<div>inner</div>
<div>innerdouble</div>
<p><a >innerthree</a></p>
<p><a >innerfour</a></p>
</div>
</div>
</html>


當(dāng)你點(diǎn)擊inner的時(shí)候,會依次彈出‘inner',‘middle'和‘without'。這就是事件冒泡。

從直觀上來看,也是這樣的,因?yàn)樽罾飳拥膮^(qū)域是在父級節(jié)點(diǎn)中的,點(diǎn)擊了子級節(jié)點(diǎn)的區(qū)域,其實(shí)也是點(diǎn)擊了父級節(jié)點(diǎn)的區(qū)域,所以事件會傳播起來。

其實(shí),很多的時(shí)候,我們并不想事件冒泡,因?yàn)檫@樣會同時(shí)觸發(fā)幾個事件。

接下來:我們點(diǎn)擊innerdouble。就會發(fā)現(xiàn)她并沒有冒泡,因?yàn)樗谡{(diào)用的方法ialertdouble()中調(diào)用了stopBubble()方法,方法通過判斷瀏覽器類型(Ie通過cancleBubble() 、firefox通過stopProgation())來阻止冒泡。

但如果是鏈接的話,我們會發(fā)現(xiàn)她也會阻止冒泡,但是會跳轉(zhuǎn),這就是瀏覽器的默認(rèn)行為。需要借助preventDefault()方法來阻止。具體可以查看ialertthree()。

目前主流的都是借助jquery來綁定click事件的,這樣的話,就簡單多了。

我們可以在點(diǎn)擊事件時(shí)傳入?yún)?shù)event,然后直接

event.stopPropagation();
event.preventDefault(); //沒有鏈接不需要加這個。

這樣就可以了。

框架就是好,其實(shí)還有更簡單的,在事件處理程序中返回false,這是對在事件對象上同時(shí)調(diào)用stopPropagation()和preventDefault()的一種簡寫方式。
【詳細(xì)代碼見上面,記得載入jquery.js。】

其實(shí)也還可以在每個click事件中加入判斷:

復(fù)制代碼 代碼如下:


$('#id').click(function(event){
if(event.target==this){
//do something
}
})


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

不過推薦使用return false,Jquery綁定事件的話。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 延庆县| 马关县| 稻城县| 沛县| 麦盖提县| 台山市| 镶黄旗| 民勤县| 万州区| 永靖县| 鄂伦春自治旗| 德化县| 横峰县| 昆山市| 壤塘县| 尉氏县| 晋城| 蓬溪县| 桂东县| 蒙城县| 博客| 彭水| 三原县| 铜陵市| 牡丹江市| 安塞县| 神池县| 喜德县| 凭祥市| 塔城市| 霍山县| 太湖县| 茌平县| 静宁县| 德兴市| 林州市| 南安市| 湟源县| 云阳县| 孙吴县| 抚顺县|