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

Gdzie SomeMethod może mieć:JavaScript: Jak zrobić Kontrola wysłać się w metodzie

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

Zamiast:

function SomeMethod(itemId) 
{ 
    var someItem; 

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

} 

Silly przykład, ale pomysł nie wysyłać jest w samym id, ale faktyczna kontrola wywołująca metodę. Przysięgam, że można to zrobić, ale nie miałem szczęścia szukać ... częściowo dlatego, że nie jestem nawet pewien, czego szukać.

Myślałem, że to ja, ale ja nie wydaje mi się tym, czego chcę, kiedy piszę scenariusz.

Odpowiedz

29

Użyj słowa kluczowego this.

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

Wiedziałem, że to było coś prostego. Trochę się brzydko prosiło ale no cóż. –

5

I mają tendencję do używania tego podejścia we wszystkich wywołań funkcji z atrybutów HTML: -

onclick="SomeMethod.call(this)" 

Następnie w javascript zrobić: -

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

ta ma wyraźną przewagę, kiedy może również przypisać bezpośrednio właściwości obsługi zdarzenia w kodzie Javascript: -

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

Jeśli SomeMethod wziął element kontekstowy jako parametr byłoby bardzo niewygodne w konfigurowaniu: -

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

gorsza będzie to pamięć wycieka zamknięcia.

11

rzeczywiście nie trzeba przechodzić ten jako argument do funkcji, ponieważ masz zdarzenia Click obiektu, że można uzyskać dostęp. Więc:

<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

W tym momencie: SomeMethod(this) - this powraca okno obiektów, więc nie należy go używać. Właściwy sposób użycia słowa kluczowego this sprawia, że ​​jest on odpowiedni dla kontekstu, więc użyj SomeMethod.call(this).

Powiązane problemy