Javascript: Wie ein Control macht sich in einem Verfahren senden
-
03-07-2019 - |
Frage
<a href="" id="someId" onclick="SomeMethod(self);"></a>
Wo Somemethod könnte:
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 in der ID schicken selbst, sondern die tatsächliche Kontrolle der Methode aufrufen. Ich schwöre, dass dies getan werden kann, aber noch kein Glück gesucht hat ... zum Teil, weil ich nicht einmal sicher bin, was zu suchen.
Ich dachte, es war selbst, aber selbst scheint nicht zu sein, was ich will, wenn das Skript I Läufe haben.
Lösung
Mit dem this
Schlüsselwort.
<a href="" id="someId" onclick="SomeMethod(this);"></a>
Andere Tipps
Sie brauchen eigentlich nicht passieren diese als Argument an die Funktion, weil Sie eine haben klicken -Ereignisobjekts , 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>
Ich neige dazu, diesen Ansatz zu verwenden, in alle Funktionen von HTML ruft Attribute: -
onclick="SomeMethod.call(this)"
Dann in dem Javascript tun: -
function SomeMethod()
{
this.setAttribute('name', this.id);
}
Dies hat einen entscheidenden Vorteil, wenn Sie sich auch direkt an Event-Handler-Eigenschaften in JavaScript-Code zuweisen können: -
document.getElementById("someID").onclick = SomeMethod
Wenn Somemethod nimmt das Context-Element als Parameter wäre es sehr umständlich einzurichten: -
function(id) {
var elem = document.getElementById(id)
elem.onclick = function() { SomeMethod(elem); }
}("someID");
Schlimmer noch wäre das Gedächtnis undichter Verschluss.
An diesem Punkt: SomeMethod(this)
- this
kehrt Fensterobjekt so verwenden Sie es nicht. Der richtige Weg this
Schlüsselwort verwenden macht es Kontext relevant, so SomeMethod.call(this)
verwenden.