Подтвердить что ты не робот

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

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

}

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

Я думал, что это я, но я, кажется, не тот, что хочу, когда у меня есть script.

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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