2012-02-29 20 views
5

mam listę przycisków (kwadraty) w HTML podobnego -Jak dodać obsługi zdarzeń do przycisków HTML z kodem javascript

<td><button id="18" ></button></td> 
    <td><button id="28" ></button></td> 
    <td><button id="38" ></button></td> 
      ... 

wcześniej, dla każdego przycisku, musiałem umieścić kod w przycisk oznaczyć się, aby dodać moduł obsługi zdarzeń, taki jak ten -

<button id="18" onclick="squareWasClicked(event)"> 

    function squareWasClicked(event) 
    { 
     var element = event.target; 

     // more code 
    } 

Ale teraz odkryłem, że nie jest to dobra praktyka. Zamiast tego próbuję dodać moduły obsługi zdarzeń z mojego kodu javascript. Ale nie wiem, jak to zrobić. Do tej pory próbowałem tego -

function assignEventsToSquares() 
    { 
    var i,j; 

    for(i=1;i<=8;i++) 
     { 
     for(j=1;j<=8;j++) 
     { 
      var squareID = "" + i + "" + j; 
      var square = document.getElementById(squareID);   
      square.onclick = squareWasClicked(); 
     } 
     } 
    } 

Ale to po prostu wywołuje funkcję squareWasClicked(). Jak więc dodać go jako funkcję obsługi zdarzeń, aby funkcja była wywoływana po kliknięciu tego kwadratu? Ponadto, jak mogę powiedzieć coś takiego jak zdarzenie nie zostanie wykryte w kodzie JavaScript. Proszę pomóż.

Odpowiedz

5
square.onclick = squareWasClicked(); 

Wymaga to czynność kliknięcia i przypisuje wynik do detektora zdarzeń elemencie, który nie jest to, co chcesz. Usuń () s, aby sama funkcja została przypisana. Dlatego powinien wyglądać tak

square.onclick = squareWasClicked; 
+0

Dzięki! To było takie zwięzłe! Dlaczego więc używany jest addEventListener? Czy jest to starsza składnia? – CodeBlue

+1

'addEventListener' jest * nowszą * składnią * (pojawia się w DOM 2, w przeciwieństwie do słuchaczy DOM 0, które rozważasz). Jeśli nie korzystasz z DOM 2, tracisz! :) –

5

Użyj element.addEventListener() (pochodzącego z DOM 2 Events spec). W twoim przypadku to będzie

document.getElementById("18").addEventListener("click", squareWasClicked, false); 
+0

Na marginesie, według specyfikacji [] (http://www.w3.org/TR/html4/types.html#type-name), _ "Żeton identyfikatora i identyfikatora NAME musi rozpoczynać się od litery ([A-Za-z]), po której może następować dowolna liczba liter, cyfr ([0-9]), myślników (" - "), znaków podkreślenia (" _ "), dwukropkami (":") i kropkami ("."). "_ –

+0

Dla starszych wersji IE (przed IE9), będziesz musiał użyć' attachEvent() ', ponieważ nie obsługują one' addEventListener'. – jfriend00

+0

Po prawej, istnieje [rozwiązanie oparte na różnych przeglądarkach] (http://dustindiaz.com/rock-solid-addevent). –

Powiązane problemy