Javascript: Como fazer um controle enviar-se em um método
-
03-07-2019 - |
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.
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)
.