2009-03-06 4 views
21
<a href="" id="someId" onclick="SomeMethod(self);"></a> 

Где SomeMethod могли бы:Javascript: Как сделать управление рассылает себя в методе

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

Вместо:

function SomeMethod(itemId) 
{ 
    var someItem; 

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

} 

Глупый пример, но идея состоит в том, чтобы не посылать в самом id, но фактический контроль, вызывающий метод. Клянусь, это можно сделать, но не повезло искать ... частично потому, что я даже не уверен, что искать.

Я думал, что это было само по себе, но я, похоже, не так, как хочу, когда сценарий у меня работает.

ответ

29

Используйте ключевое слово this.

<a href="" id="someId" onclick="SomeMethod(this);"></a> 
+2

Я знал, что это что-то простое. Вид чувствовал себя грязным, спрашивая, но хорошо. –

5

Я предпочитаю использовать этот подход во всех вызовов функций из атрибутов 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"); 

еще хуже, это будет память течь закрытия.

11

Вы на самом деле не нужно передавать это в качестве аргумента в вашей функции, потому что у вас есть клик объект события, что вы можете получить доступ. Итак:

<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> 
0

На данный момент: SomeMethod(this) - this возвращает объект окна, так что не использовать его. Правильный способ использования ключевого слова this делает его актуальным для контекста, поэтому используйте SomeMethod.call(this).