2012-02-29 5 views
5

tengo una lista de botones (cuadrados) en HTML como este -Cómo agregar controladores de eventos a los botones HTML desde dentro de código JavaScript

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

Anteriormente, para cada botón, tuve que poner el código en el botón propia etiqueta para agregar un controlador de eventos, como este -

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

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

     // more code 
    } 

Pero ahora he descubierto que no es una buena práctica. Por lo tanto, en su lugar, estoy tratando de agregar controladores de eventos desde mi código de JavaScript. Pero no sé cómo hacer eso. Hasta ahora, he intentado esto -

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(); 
     } 
     } 
    } 

Pero esto simplemente llama a la función squareWasClicked(). Entonces, ¿cómo lo agrego como controlador de eventos para que la función se invoque cuando se hace clic en el cuadrado? Además, ¿cómo puedo decir algo como

 square.onclick = squareWasClicked(event); 

no se detecta el evento en el código JavaScript. Por favor ayuda.

Respuesta

5
square.onclick = squareWasClicked(); 

Este llama a su función de clic y asigna el resultado a la escucha de sucesos de su elemento, que no es lo que desea. Elimine () s para que se asigne la función en sí. Por lo tanto, debe tener este aspecto

square.onclick = squareWasClicked; 
+0

¡Gracias! ¡Eso fue muy conciso! ¿Por qué entonces se usa addEventListener? ¿Es una sintaxis más antigua? – CodeBlue

+1

'addEventListener' es una sintaxis * newer * (surgida en DOM 2, a diferencia de los detectores DOM 0 que está considerando). Si no está utilizando DOM 2, ¡se está perdiendo! :) –

5

Use element.addEventListener() (originario de DOM 2 Events spec). En su caso, será

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

En una nota lateral, de acuerdo con el [especificación] (http://www.w3.org/TR/html4/types.html#type-name), _ "Los tokens de ID y NAME deben comenzar con una letra ([A-Za-z]) y pueden ir seguidos de cualquier cantidad de letras, dígitos ([0-9]), guiones (" - "), guiones bajos (" _ "), dos puntos (":") y puntos ("."). "_ –

+0

Para versiones anteriores de IE (antes de IE9), necesitará usar' attachEvent() 'ya que no son compatibles con' addEventListener'. – jfriend00

+0

Correcto, hay una [solución de varios navegadores] (http://dustindiaz.com/rock-solid-addevent) para esto. –

Cuestiones relacionadas