2012-07-30 104 views
3

我有一個表格行,它使用javascript來打開某些菜單時單擊基於選定的行。我也有一個<a href>標記用於打開鏈接或在其他地方重定向。href和tr點擊避免重疊

問題是,當我點擊<a href>鏈接時,也會執行表格行來打開菜單。

它的PHP/Javascript語言。

這是表格TR腳本:

echo "<tr onclick=\"enableDialogs(1)\";>"; 

對於同一行中的<a>鏈接:

echo "<td><a href='?folder={$filedir}'>{$list}</a></td>"; 

的問題是,如何避免上點擊功能兩者的重疊?

+0

嗯。那麼,問題是'tr'點擊處理程序正在執行,即使'a'點擊處理程序也在執行。答案似乎是檢測當前正在執行哪個元素來確定是否應該「處理」tr處理程序。 – 2012-07-30 02:50:01

+1

與jQuery這將是一個簡單的情況下添加'event.stopPropogation()'錨定點擊處理程序... – bdares 2012-07-30 02:52:01

回答

2

你有一個事件冒泡的經典案例。由於一些評論建議利用來自訂閱元素的回調,引用第一個參數,並停止標記冒泡。假設myElement是您的<a>的1個DOM節點。

myElement.addEventListener("click", function(e) { 
    e.stopPropagation(); 
}, false); 

當然jQuery的回調的工作原理相同

$(myElement).click(function(e) { 
    e.stopPropagation(); 
}); 
+0

這是行得通!謝謝! – Mezzan 2012-07-30 03:30:16

2

創建一個函數來檢查菜單是否已經打開。

如果它已經打開,它將繼續重定向或執行您的代碼。如果不是,它只是打開它。

基本上,讓功能照顧整個事情。

1

你需要停止事件傳播。

See the DEMO

JavaScript代碼:

function stopPropagation(e) { 
    if(!e) var e = window.event; 

    if (e.stopPropagation) { 
     e.stopPropagation(); 
    } else { 
     e.cancelBubble = true; 
     e.returnValue = false; 
    } 
} 

PHP代碼:

echo "<td><a href='?folder={$filedir}' onclick=\"stopPropagation(event)\">{$list}</a></td>"; 

+0

這也適用。謝謝! – Mezzan 2012-07-30 03:33:07