1. 程式人生 > >event.cancelBubble=true e.stopPropagation() 取消事件處理,阻止事件

event.cancelBubble=true e.stopPropagation() 取消事件處理,阻止事件

<tr><a href="xxx">連線</a></tr>

如上結構,單擊tr的時候跳轉至另一頁

 

<tr style="cursor:pointer" onmouseover="this.style.backgroundColor='gainsboro'" onmouseout="this.style.backgroundColor=''" onclick="return Click();">

 

function Click() {

    window.location.href = "xxx";

}

 

<a href="xxx">連線</a> 可更改為<a href="xxx" onclick="event.cancelBubble=true">連線</a>

這樣可以避免單擊a標籤的同時也跳轉至另一頁面。onclick="event.cancelBubble=true" 取消事件處理。

否則單擊a的同時會跳轉另一頁面。

解析:

取消事件冒泡,在 IE 的事件機制中,觸發事件會從子元素向父元素逐級上傳,就是說,如果子元素觸發了單擊事件,那麼也會觸發父元素的單擊事件;event.cancelBubble=true;可以停止事件繼續上傳

補充一點,Ie的事件傳遞是從下到上的:

事件來源物件->上級物件->上上級物件->.....->body->document->window

NS的事件傳遞是從上到下:

window->document->body->....->事件來源物件

(event.returnValue=false 設定事件的返回值為false,即取消事件處理)

2、兩個事件區別

e.cancelBubble=true;// ie下阻止冒泡

e.stopPropagation();// 其它瀏覽器下阻止冒泡

stop propagation 語氣比較正規,嚴肅;意譯為“停止傳播”
cancel bubble 語氣比較口語化,近似聊天;意譯為“取消冒泡”,也就是不要閒言碎語。

其實現在IE在遵守W3C標準下,兩個事件都可以阻止事件冒泡。

我在實際工作中運用如下

//直接寫在HTML裡
 <a target="_blank" onclick="event.cancelBubble=true;" href='{:url("$classuri/printing_in")}?id={$vo.id}'>列印</a>


//寫在js裡
<a data-myhref='{:url("$classuri/info")}?id={$vo.id}' onclick="td_click(this,event);">{$vo.billcode}</a>

 function td_click(obj,ev){
        layer.open({
            title: '檢視詳情', type: 2, area: ['800px', '650px'], fix: true, maxmin: false, content: $(obj).data("myhref"),offset: '100px'
        });
        var e=(ev)?ev:window.event;
        if (window.event) {
            e.cancelBubble=true;// ie下
        } else {
            e.stopPropagation();// 其它瀏覽器
        }
    }