這是因爲設置onclick
HTML屬性相當於設置了這樣一個匿名功能:
element.onclick = function(event) {
generateUrl();
}
正如您所看到的,在您的呼叫中,您丟失了event
對象和this
上下文對象,該對象成爲全局對象(瀏覽器的window
)。
然後你有幾種方法。首先,不要使用HTML屬性,而應該使用JS設置點擊,這是一種更好的做法 - 儘可能避免使用意大利式麪條代碼。
你使用jQuery,因此:
$(function() {
$("#abc").click(generateUrl);
});
另外,你的函數可以簡化爲:
function generateUrl() {
window.location.hash = this.id;
}
所以你的HTML將只是:
<a id="abc">this is an anchor btn</a>
如果,出於任何原因,您不能/不希望從HTML中刪除onclick
,您必須對其進行一些修改:
<a id="abc" onClick="generateUrl.call(this)" >this is an anchor btn</a>
通過這種方式,您可以調用傳遞正確的上下文對象的函數。正如日後參考,你還可以通過event
作爲第一個參數:
<a id="abc" onClick="generateUrl.call(this, event)" >this is an anchor btn</a>
附: 請注意,如果a
標記中沒有href
屬性,則瀏覽器不會將該標記作爲「鏈接」進行威脅。
你從控制檯日誌中得到什麼? – 2013-04-09 02:37:24
我明白了: [Window,jquery:「1.9。1「,構造函數:函數,初始化函數,選擇器:」「,大小:函數...] – 2013-04-09 02:39:17
你可以改變你的鏈接到'this is an anchor btn'並且將達到相同的結果 – 2013-04-09 02:40:16