2009-06-01 49 views
0

如果我有這樣的代碼:我可以告訴任何有關在JavaScript中點擊過的超鏈接嗎?

<script> 
function determine() 
{ 
    // ???? 
} 
</script> 

<a href="blah1" onclick="determine()">blah1</a> 
<a href="blah2" onclick="determine()">blah2</a> 

有沒有辦法在確定()查看點擊了哪個環節? (是的,我知道,簡單而正確的做法是通過「this」來確定()...但在這種情況下,由於遺留代碼問題,這不會很容易做到。)

編輯:我也許應該在一開始,我們的網站目前沒有使用(而不能使用,暫時)也提到了這一點... ... JQuery的JQuery的那麼答案(而一般寶貴此問題類型)實際上不會幫助我。

回答

1

如果你不能改變的onclick =「確定()」在你的HTML,但你可以改變的確定()函數,那麼我認爲你最好的選擇是:

離開確定()函數空白所以它什麼都不做。

使用javascript(如其他答案所述)爲每個鏈接添加一個真正的點擊處理程序,並使用事件來確定哪個鏈接被點擊,然後執行所需的代碼。

4

查看這個來自quirksmode的link。你可以獲得事件目標。

function doSomething(e) { 
    var targ; 
    if (!e) var e = window.event; 
    if (e.target) targ = e.target; 
    else if (e.srcElement) targ = e.srcElement; 
    if (targ.nodeType == 3) // defeat Safari bug 
     targ = targ.parentNode; 
} 
+0

別人的jQuery的答案是比這更好的,我認爲 – Geoff 2009-06-01 19:21:08

+4

或許,對於一些人來說,JQuery的答案會更好......但對我們來說,我們並沒有使用JQuery現在(和可以」暫時使用它)...所以這看起來像th迄今爲止最好的解決方案。 – Beska 2009-06-01 19:23:02

0

您可以添加事件,每一個環節,像這樣

links = document.getElementsByTagName('a'); 

for (link in links) { 

    link.onclick = function() { 
     alert(this.id); 
     determine(); // or some other important code? 
    } 

} 
2

您可以用直線上升的JavaScript,但我更喜歡使用像jQuery的:

<a href="blah1">blah1</a> 

<script type="text/javascript"> 
    $('a[href=blah1]').click(function() { 
    var link = $(this); // here's your link. 
    return false; // acts like the link was not clicked. return true to carry out the click. 
    }); 
</script> 

假設你正在使用$().click()功能,$(this)會給你鏈接。

0

另一種解決方案:

在文檔中添加一個onclick處理程序。當用戶點擊鏈接時,點擊事件將「冒泡」到窗口,您將有權訪問該事件以確定哪個鏈接被點擊。

如果您只想讓代碼針對已經具有onclick =「determine()」的鏈接運行,那麼這可能很有用 - 您可以設置determine()函數來設置變量。然後,當用戶單擊鏈接時,會運行determine()函數來設置變量,並且當文檔單擊處理程序運行時,您可以檢查該變量 - 然後您將知道該鏈接具有onclick =「determine()」。

讓我知道如果我可以讓你更復雜一點對你...:-)

0

如果你不能改變onclick屬性,通過JavaScript打補丁:

// use a DOMContentLoaded hack or `onload` as fallback 
onload = function() { 
    var links = document.links; 
    for(var i = 0; i < links.length; ++i) { 
     // there might be a better way to check which links to modify 
     // don't know without further details 
     if(/determine\(\)/.test(links[i].onclick)) 
      links[i].onclick = determine; 
    } 
}; 

function determine() { 
    // the link is now available as `this` 
    alert(this.href); 
} 

也許一個更好的解決辦法是在全球,IE風格event對象來修補符合標準瀏覽器:

if(document.addEventListener) { 
    document.addEventListener('click', function(e) { 
     window.event = e; 
    }, true); 
} 

function determine() { 
    var src = event.target || event.srcElement; 
    alert(src.href); 
}