2012-04-11 13 views
12

pisałem javascript klasy o nazwie „MojaKlasa”, w którym mam zdefiniowaną metodę „closeThis”JavaScript - zdarzenie onclick uzyskiwanie wywoływana automatycznie

MyClass = function(){ 

this.closeThis = function(){ 
     document.getElementById("hidePane").style.display = 'none'; 
} 

} 

Teraz, w moim html, staram się nazwać w następujący sposób ...

<script type="text/javascript"> 
    function callThis(){ 
     var myclassObj = new MyClass(); 
     document.getElementById("closeButton").onclick = myclassObj.closeThis(); 
    } 
</script> 

Powyższe połączenie zostanie wywołane po kliknięciu przycisku. Problem polega na tym, że zdarzenie "onclick" na górze "clsoeButtion" jest wywoływane automatycznie po załadowaniu strony. Co może być w tym złego?

+2

Usuń parantezę po ... onclick = myclassObj.closeThis(). –

Odpowiedz

15

Wywołujesz funkcję od razu.

Po opuszczeniu nawiasów na odniesienie funkcji, co jesteś w zasadzie mówią to:

ocenić funkcję closeThis i przypisać wynik do onclick

kiedy to, co naprawdę chcesz do jest przypisane odwołanie do funkcji do obsługi kliknięcia:

document.getElementById("closeButton").onclick = myclassObj.closeThis; 

Zamiast tego należy pominąć nawiasy, a powiążesz clo seTa funkcja do onclick. Zamiast tego jest to:

Przypisanie funkcji closeThis do obsługi kliknięcia.

Zasadniczo przypisujesz funkcję do zmiennej jako obiekt pierwszej klasy lub odwołanie do funkcji.

Na marginesie, moim osobistym życzeniem jest zawsze używać anonimowego opakowania funkcji. Czasami trzeba być w stanie przekazać parametry do swojej funkcji, a to sprawia, że ​​się, że można łatwiej to zrobić:

document.getElementById("closeButton").onclick = 
    function() { 
     myclassObj.closeThis(); 
    }; 
+2

Dzięki @ jmort253 To działało jak czar ... Pierwsze podejście, które zasugerowałeś, jest jak przypisanie wyniku do zdarzenia onclick, co jest dziwne. Drugie podejście jest fajne. Jak już powiedziałeś, mogę nadal przekazywać parametry. Wielkie dzięki :-) – Sriram

2

Musisz usunąć () z niej inaczej to jest wywoływana natychmiast, ponieważ to jak nazwać funkcja przez dodanie przyrostka (), tak po prostu usunąć te szelki:

document.getElementById("closeButton").onclick = myclassObj.closeThis; 
5

powinno być document.getElementById("closeButton").onclick = myclassObj.closeThis; nie myclassObj.closeThis();

myclassObj.closeThis() wywoła funkcję, a następnie przypisz wartość do onclick

Powiązane problemy