我有以下HTML代码
<a href="javascript:update(this)">Val1</a>
<a href="javascript:update(this)">Val2</a>
功能
function update(obj) {
alert(obj); // I expect to get a tag object but I am getting Window Object
//do something
}
现在我希望得到一个引用标签的对象,但是我得到了Window Object。有人可以告诉我为什么没有传递引用标签的对象
答案 0 :(得分:2)
有人可以告诉我为什么没有传递引用标签的对象
因为这不是事件属性,所以它是一个URL。使用javascript:
伪协议的URL中的代码作为全局代码运行,this
引用全局对象,就像script
元素中的代码一样(不使用{{} 1}})是。
如果您使用的是事件属性,例如"use strict"
,则代码将运行,就好像它位于全局范围内的函数中,onclick
设置为元素和范围内{ {1}}引用当前事件的变量。
答案 1 :(得分:1)
您正在访问javascript:
方案URI,而不是在Element对象的上下文中触发事件。
<a href="sensible_fallback.html" onclick="return update(this)">Val1</a>
function update(element) {
alert(element);
return false;
}
...但这是2014年,所以不要使用内在事件属性。
<a href="sensible_fallback.html" id="foo">Val1</a>
function update(event) {
alert(this);
event.preventDefault();
}
document.getElementById('foo').addEventListener('click', update);
...如果你没有合理的后备,那就用一个按钮,而不是一个链接。