Pergunta

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

Onde SomeMethod poderia ter:

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

Em vez de:

function SomeMethod(itemId)
{
  var someItem;

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

}

Silly exemplo, mas a idéia não é enviar no próprio id, mas o controle real de chamar o método. Juro isso pode ser feito, mas não tiveram a pesquisa sorte ... parcialmente porque eu nem tenho certeza do que procurar.

Eu pensei que era eu, mas eu não parece ser o que eu quiser, quando o script eu tenho é executado.

Foi útil?

Solução

Use o this palavra-chave.

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

Outras dicas

Você realmente não precisa passar este como um argumento para a sua função, porque você tem um clique em objeto de evento que você pode acessar. Assim:

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

I tendem a usar essa abordagem em todas as chamadas de função de HTML atributos: -

onclick="SomeMethod.call(this)"

Em seguida, no javascript fazer: -

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

Isto tem uma vantagem distinta quando você também pode atribuir diretamente às propriedades manipulador de eventos no código Javascript: -

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

Se SomeMethod tomou o elemento do contexto como um parâmetro que seria muito difícil de configurar: -

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

Pior ainda este seria fechamento fuga de memória.

Neste ponto: SomeMethod(this) - this objeto de janela retornos por isso não usá-lo. A maneira certa de palavra-chave uso this está tornando contexto relevante, por isso uso SomeMethod.call(this).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top