Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/04/2016, 03:03
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 10 meses
Puntos: 270
Respuesta: onclick se ejecuta automaticamente en la creacion

Cita:
Iniciado por Fernand0 Ver Mensaje
Porque no se declara de esa manera. Al hacerlo de esa manera automaticamente la funcion se ejecuta.

Tenes 4 maneras de hacerlo
Código Javascript:
Ver original
  1. imagen.onclick= function() { clickImg(libros,""+i); };
Código Javascript:
Ver original
  1. imagen.addEventListener("click", function() {
  2.     clickImg(libros,""+i);
  3. });
Esas dos formas son incorrectas. La variable i dentro de las funciones está referenciando una variable definida en un entorno donde es índice de un bucle.Por lo tanto, cuando se ejecute ese callback, independientemente de la imagen sobre la que se haga click, la variable "i" siempre valdrá libros.length.
Si quieres hacerlo así, tienes que hacer que la variable "i" referencie a una variable definida en un contexto diferente.Por ejemplo:
Código Javascript:
Ver original
  1. imagen.onclick= (function(i) { return function() { clickImg(libros,""+i); }})(i);
Eso es una función autollamada, que retorna una función callback, que es la que se asigna al evento.
Lo importante es que la variable "i" de esa función callback, ya no referencia a la variable "i" del bucle.Referencia al parámetro "i" de la función autollamada, por lo que tiene su propia "copia", y no sufre del problema anterior.