42
<a href="" id="someId" onclick="SomeMethod(self);"></a>

SomeMethod 可能有的地方:

function SomeMethod(item)
{
  item.setAttribute('name', item.id);
}

代替:

function SomeMethod(itemId)
{
  var someItem;

  someItem = document.getElementById(itemId);
  someItem .setAttribute('name', someItem .id);

}

愚蠢的例子,但想法不是发送 id 本身,而是调用方法的实际控制。我发誓这可以做到,但没有运气搜索......部分原因是我什至不确定要搜索什么。

我以为是自我,但是当我运行的脚本时,自我似乎不是我想要的。

4

4 回答 4

62

使用this关键字。

<a href="" id="someId" onclick="SomeMethod(this);"></a>
于 2009-03-06T16:42:11.577 回答
13

您实际上不需要将此作为参数传递给您的函数,因为您有一个可以访问的点击事件对象。所以:

<a href="" id="someId" onclick="clickEventHandler()"></a>
<script>
function clickEventHandler(event) {

    if (!event) {
        event = window.event; // Older versions of IE use 
                              // a global reference 
                              // and not an argument.
    };

    var el = (event.target || event.srcElement); // DOM uses 'target';
                                                 // older versions of 
                                                 // IE use 'srcElement'
    el.setAttribute('name', el.id);

}
</script>
于 2009-03-08T13:27:36.270 回答
8

我倾向于在来自 HTML 属性的所有函数调用中使用这种方法:-

onclick="SomeMethod.call(this)"

然后在javascript中做: -

function SomeMethod()
{
   this.setAttribute('name', this.id);
}

当您还可以直接分配给 Javascript 代码中的事件处理程序属性时,这具有明显的优势:-

document.getElementById("someID").onclick = SomeMethod

如果 SomeMethod 将上下文元素作为参数,那么设置起来会非常尴尬:-

function(id) {
   var elem = document.getElementById(id)
   elem.onclick = function() { SomeMethod(elem); }
}("someID");

更糟糕的是,这将是内存泄漏关闭。

于 2009-03-06T16:59:24.547 回答
2

此时:SomeMethod(this)-this返回窗口对象,所以不要使用它。使用this关键字的正确方法是使其与上下文相关,所以使用SomeMethod.call(this).

于 2017-06-13T10:59:41.107 回答