2011-07-15 93 views
2

試圖做一些管理後端的事情,如何跳過jQuery的冒泡階段

我有一個tr行包含操作鏈接。

<tr> 
    <td> 
    <span>item1</span> 
    </td> 
    <td> 
    <a href="#">delete</a> 
    </td> 
</tr> 

當用戶點擊TR線,就應該選擇它(和處理程序綁定到事件,這樣我就可以顯示額外的信息 別的地方), 和 當在用戶點擊刪除鏈接,應該調用另一個處理程序來刪除該項目。

設置單擊事件爲兩個目標,像這樣:

$("tr").click(function(e){ 
     // show line infos, by reloading the page 
}); 

$("tr a").click(function(e){ 
    // delete item 
}); 

當我點擊刪除鏈接, 看來該TR事件總是先叫, 和因爲我的TR的處理程序重新加載頁面 鏈接的處理程序永遠不會被調用。 這是正常的,因爲冒泡,系統會調用 我的處理順序如下:

下降階段:TR一

階段:一TR

我怎麼能跳過第一TR在下降階段處理?

我嘗試了一些東西 e.preventDefault(),e.​​stopPropagation()沒有成功。

+0

嘗試使用-http://api.jquery.com/event.stopImmediatePropagation/ – Vivek

+0

您所描述的不是事件冒泡而是事件捕獲。但在你的情況,使用冒泡:http://jsfiddle.net/r3KZu/ – Sotiris

回答

0

你的觀察看起來有點奇怪。 <a>應先點擊它的點擊事件,然後點擊<tr>。如果是這樣,該事件確實會泡沫,您可以通過停止傳播覆蓋冒泡(或返回false,這會取消默認事件,並停止傳播):

$("tr").click(function(e){ 
    ... 
}); 

$("tr a").click(function(e){ 
    ... 
    return false; 
}); 

工作例如:http://jsfiddle.net/cFjmc/

0

是你都是權利,我犯了一個錯誤,

對於奇怪的帖子感到抱歉, 我剛剛意識到我的測試用例不是我提交的。

現在我可以按照正確的順序得到東西。謝謝。