2009-10-13 27 views
6

Kiedy próbuję dołączyć funkcje obsługi zdarzeń z parametrów, takich jak:dostęp do obsługi zdarzeń

myhandle.onclick = myfunction(param1,param2); 

function myfunction(param1,param2){ 
} 

Teraz chcę uzyskać dostęp do obiektu zdarzenia w moim funkcji obsługi. Jest to podejście wspomniano w internecie wysyłania obiekt zdarzenia, jak:

myhandle.onclick = myfunction(event,param1,param2); 

Ale jego dając obiekt zdarzenia niezdefiniowany kiedy przetestować go.

Wiem, że biblioteki ułatwiają to, ale szukam natywnej opcji JS.

Odpowiedz

4

Nie jestem do końca pewien, co próbujesz zrobić, ale może coś takiego właśnie szukasz?

function myfunction(param1, param2){ 
    return function(event) { 
     // For compatibility with IE. 
     if (!event) { 
      event = window.event; 
     } 

     alert("event = " + event + ", param1 = " + param1 + ", param2 = " + param2); 
    }; 
} 

myhandle.onclick = myfunction(param1, param2); 

Rezultatem tego jest to, że anonimowe funkcji wewnątrz myfunction będzie nazywany jako obsługi onclick, co w przypadku plus dwa parametry są drukowane. Te dwa parametry są stałe w momencie dodawania obsługi zdarzeń, a zmiana event zmienia się za każdym razem, gdy użytkownik kliknie na myhandle.

0

Spróbuj tego:

if (!event) { event = window.event; } 

wewnątrz myFunction().

7

myhandle.onclick = mojafunkcja (parametr1, param2);

Jest to typowy błąd dla początkujących na poziomie JavaScript, a nie coś, co biblioteki naprawdę mogą naprawić.

Nie jesteś przypisując myfunction jako handler click, jesteś nazywającmyfunction, z param1 i param2 jako argumenty i przypisywanie wartości zwracanej przez funkcję do onclick. myfunction nic nie wróci, więc chcesz być przypisanie undefined do onclick, co miałoby żadnego wpływu ..

Co masz na myśli to, aby przypisać odniesienie do myfunction sama:

myhandle.onclick= myfunction; 

zdać działa kilka dodatkowych argumentów, musisz zrobić zamknięcie zawierające ich wartości, co zwykle odbywa się za pomocą anonimowej funkcji inline. To może zająć przechodząc zdarzenie na zbyt jeśli trzeba (choć tak czy inaczej trzeba jakiś plan awaryjny dla IE, gdzie obiekt zdarzenia nie jest przekazywana jako argument):

myhandle.onclick= function(event) { 
    myfunction(param1, param2, event); 
}; 

W ECMAScript piąta edycja, która będzie przyszłą wersję JavaScriptu, możesz napisać to jeszcze łatwiej: (. z window jest obojętne wart this których nie trzeba będzie w tym przypadku)

myhandle.onclick= myfunction.bind(window, param1, param2); 

Jednakże, ponieważ wiele dzisiejszych przeglądarek nie działa t obsługuje Piąte Wydanie, jeśli chcesz użyć tej metody, musisz podać implementację dla starszych przeglądarek.Niektóre biblioteki zawierają już jeden; tutaj jest inny samodzielny.

if (!('bind' in Function.prototype)) { 
    Function.prototype.bind= function(owner) { 
     var that= this; 
     var args= Array.prototype.slice.call(arguments, 1); 
     return function() { 
      return that.apply(owner, 
       args.length===0? arguments : arguments.length===0? args : 
       args.concat(Array.prototype.slice.call(arguments, 0)) 
      ); 
     }; 
    }; 
} 
+0

wielkie dzięki! to wyjaśnia pięknie. – Rajat

Powiązane problemy