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

Dove SomeMethod potrebbe avere:Javascript: Come fare un controllo di sé inviare in un metodo

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

Invece di:

function SomeMethod(itemId) 
{ 
    var someItem; 

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

} 

esempio stupido, ma l'idea di non inviare è nell'id stesso, ma il controllo effettivo chiama il metodo. Giuro che questo può essere fatto ma non ho avuto fortuna a cercare ... parzialmente perché non sono nemmeno sicuro su cosa cercare.

Ho pensato che fosse autonomo, ma il sé non sembra essere quello che voglio quando lo script che ho eseguito.

risposta

29

Utilizzare la parola chiave this.

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

Sapevo che era qualcosa di semplice. Tipo di feltro sporco chiedendo ma oh bene. –

5

Io tendo ad usare questo approccio in tutte le funzioni chiamate da attributi HTML: -

onclick="SomeMethod.call(this)" 

Poi negli javascript do: -

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

Questo ha un netto vantaggio quando si può anche assegnare direttamente alle proprietà del gestore di eventi nel codice Javascript: -

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

Se SomeMethod ha preso l'elemento di contesto come parametro sarebbe molto imbarazzante per impostare: -

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

Peggio ancora questo sarebbe la memoria che perde la chiusura.

11

In realtà non è necessario passare questo come argomento alla funzione, perché hai un oggetto evento click cui è possibile accedere. Quindi:

<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

A questo punto: SomeMethod(this) - this ritorna finestra degli oggetti, quindi non ne fanno uso. Il modo corretto di utilizzare la parola chiave this lo rende pertinente al contesto, quindi utilizzare SomeMethod.call(this).

Problemi correlati