国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 敦煌市| 克拉玛依市| 新绛县| 韶山市| 华容县| 那曲县| 娱乐| 七台河市| 桃园市| 永川市| 新巴尔虎左旗| 土默特左旗| 曲周县| 肥西县| 瑞安市| 东乌珠穆沁旗| 乌拉特中旗| 利川市| 农安县| 志丹县| 翁牛特旗| 湘西| 锡林郭勒盟| 蓬安县| 资溪县| 蓝山县| 黄骅市| 古田县| 连平县| 社会| 耿马| 多伦县| 嘉义县| 秭归县| 山阳县| 商丘市| 桐庐县| 华安县| 丰台区| 中江县| 牙克石市|