这是因为设置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>
如果出于任何原因,您不能/不想onclick
从 HTML 中删除 ,则必须对其进行一些修改:
<a id="abc" onClick="generateUrl.call(this)" >this is an anchor btn</a>
通过这种方式,您正在调用传递正确上下文对象的函数。就像将来的参考一样,您也可以传递event
as 第一个参数:
<a id="abc" onClick="generateUrl.call(this, event)" >this is an anchor btn</a>
PS 请注意,如果href
您的标签中没有属性a
,浏览器不会将该标签威胁为“链接”。