为什么Window对象传递给函数

时间:2014-05-15 08:10:18

标签: javascript html

我有以下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。有人可以告诉我为什么没有传递引用标签的对象

2 个答案:

答案 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);

...如果你没有合理的后备,那就用一个按钮,而不是一个链接。