<a href="javascript:foo(this)">通过Window,我想要标记

<a href="javascript:foo(this)"> passes Window, I want the tag element itself

本文关键字:quot Window gt 通过 我想要 foo href lt javascript this      更新时间:2023-09-26

我希望它打印"a",因为当我调用foo(this)时,参数似乎是链接标记。

<script type="text/javascript">
    function foo (e) {
        alert (e .tagName);
    }
</script>
<a href="javascript:foo(this)">click</a>

相反,它会打印"未定义"。如果我alert(e),它会显示"对象窗口"。如何让foo知道是哪个元素启动了它?不传递/查找ID。

您不应该将href用于JavaScript。不好的做法是,使用onclick,this会神奇地指向链接。

<a href="#" onclick="foo(this)">click</a>

您还需要取消链接的单击操作。使用return false或使用preventDefault取消事件。

最好使用Unobtrusive JavaScript 附加事件

你也可以直接这样做

<a href="#" onclick="alert(this.tagName);">click</a>​

this对象在所有浏览器中的处理方式并不相同。这是Prototype和jQuery等库试图规范化的众多项目之一。然而,也就是说,正如许多其他答案所指出的那样,大多数浏览器将在onclick句柄上传递适当的this(而不是href)。如果您想适当地处理this,您将需要执行本问题中详细介绍的操作。

其他方法是正确的,因为将javascipt放在href属性中确实是不好的做法。

但是我们并不总是完全控制我们必须维护和使用的库。尤其是第三方工具。

当没有其他选项时,我使用的技巧是将生成的ID作为注释添加到HREF的开头。然后使用JQuery搜索具有以ID开头的HREF属性的锚元素。

这是非常缓慢和低效的,但确实有效。

<a href="javascript:/*YourIdGoesHere*/ foo($('a[href^=''javascript:/*YourIdGoesHere*/'']')[0]); void(0);">click</a>
<script type="text/javascript">
    function foo (a) {
        console.log(a);
    }
</script>
<a href="#" onclick="foo(this)">click</a>
function foo(obj) {
    alert(obj.tagName);
}​

不要调用元素e,这是事件对象的标准。

JSfiddle DEMO