2012-01-22 78 views
1

與下面的HTML:,得到錨的HREF中的onclick觸發

<div> 
    <a href='#link1' onclick='func()' >Link 1</a> 
    <a href='#link2' onclick='func()' >Link 2</a> 
    <a href='#link3' onclick='func()' >Link 3</a> 
</div> 

function func() { 
    var href = ??; 
    if(href.match(/#link1/)) { 
     ... 
    } 
} 

鉻(和IE?)可以使用此代碼

var href = window.event.target.href; 

window.event在Firefox中不存在

如果事件通過addEventListener連接,然後可以有e作爲參數。但在html中聲明時無法將事件傳遞給onclick函數。

回答

1

你得到的事件作爲參數,在onclick處理程序本身。所以,你可以這樣做:

<a href="#link1" onclick="func(event)" >Link 1</a> 

,然後你可以看一下事件的目標func

+0

傑出!在Chrome和Firefox上測試 - 按照廣告的方式工作。意味着無論通過html腳本還是addEventListener函數,觸發器都以相同的方式工作。 –

4

通行證在this給你的函數,然後直接訪問href屬性。 this將引用發出呼叫的元素。您可能還想返回false - 這會阻止點擊鏈接進行導航。

http://jsfiddle.net/qjXVy/

function func(elem) { 
    alert(elem.href); 
    return false; 
} 

 

<div> 
    <a href="#link1" onclick="func(this)" >Link 1</a> 
    <a href="#link2" onclick="func(this)" >Link 2</a> 
    <a href="#link3" onclick="func(this)" >Link 3</a> 
</div> 
+0

我認爲'this'是窗口,而不是錨點 - 或者只有當'func'通過'addEventListener'被調用時纔會出現? –

+0

因爲'this'在onclick處理程序中,它引用了clicked元素。然後我們將這個傳遞給函數。函數內部的'this'就是指窗口。 – mrtsherman

+0

謝謝!無法在javascript中計算'this'的變體數量我已經絆倒了! –