这是因为设置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