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

in einem Verfahren machen, wo Somemethod könnte:Javascript: Wie sich eine Steuerung senden

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

Statt:

function SomeMethod(itemId) 
{ 
    var someItem; 

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

} 

Dumme Beispiel, aber die Idee ist nicht zu senden in der ID selbst, aber die eigentliche Kontrolle ruft die Methode auf. Ich schwöre, das kann gemacht werden, aber ich hatte kein Glück beim Suchen ... teilweise, weil ich nicht einmal sicher bin, wonach ich suchen soll.

Ich dachte, es war Selbst, aber Selbst scheint nicht zu sein, was ich will, wenn das Skript ich ausgeführt habe.

Antwort

29

Verwenden Sie das Schlüsselwort this.

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

Ich wusste, dass es etwas Einfaches war. Irgendwie dreckig gefragt, aber na ja. –

5

Ich neige dazu, diesen Ansatz in allen Funktion zu nutzen Anrufe von HTML-Attribute: -

onclick="SomeMethod.call(this)" 

Dann in den Javascript tun: -

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

Dieser einen deutlichen Vorteil hat, wenn Sie kann auch direkt den Ereignishandlereigenschaften in Javascript-Code zugewiesen werden: -

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

Wenn Somemethod als Parameter das Kontextelement nahm wäre es sehr umständlich bis zu setzen: -

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

Schlimmer noch wäre das Gedächtnis Verschluss undicht.

11

Sie brauchen eigentlich nicht diesen als Argument an Ihre Funktion zu übergeben, weil Sie einen click -Ereignisobjekts haben die Sie zugreifen können. Also:

<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

An diesem Punkt: SomeMethod(this) - this kehrt Fensterobjekt so verwenden Sie es nicht. Der richtige Weg, das Schlüsselwort this zu verwenden, besteht darin, dass es kontextrelevant ist, also verwenden Sie SomeMethod.call(this).

Verwandte Themen