Foros del Web » Programando para Internet » Javascript »

pasar i como parametro de una funcion dentro de un loop

Estas en el tema de pasar i como parametro de una funcion dentro de un loop en el foro de Javascript en Foros del Web. Estoy dando vueltas con esto, pero no lo puedo resolver. Llamo una funcion y le paso parametros desde dentro de un loop. Pero solo me ...
  #1 (permalink)  
Antiguo 05/04/2011, 13:25
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
pasar i como parametro de una funcion dentro de un loop

Estoy dando vueltas con esto, pero no lo puedo resolver. Llamo una funcion y le paso parametros desde dentro de un loop. Pero solo me toma el ultimo valor del loop!
Código Javascript:
Ver original
  1. for (var i=0; i<cantidadOpciones; i++)
  2.        {      
  3.          indexOpcion = comboOriginal.options[i].index;
  4.        
  5.          itemCombo = document.createElement('a');
  6.          itemCombo.id = "input"+indexOpcion;
  7.          itemCombo.href = "#"+indexOpcion;
  8.          itemCombo.innerHTML = comboOriginal.options[i].text;        
  9.          
  10.          indice = eval(indexOpcion);
  11.          itemCombo.onclick = function(){ seleccionar( combo_id, indice ); return false; };
  12.          divDesplegable.appendChild(itemCombo);                
  13.        }

El error es en esta linea:
itemCombo.onclick = function(){ seleccionar( combo_id, indice ); return false; };

En fin, cada vez que clickeo en uno de los links generados, el valor siempre es el ultimo. En cambio, con esta linea el valor si es variable:
itemCombo.href = "#"+indexOpcion;

Estoy trabajando con IE.
  #2 (permalink)  
Antiguo 05/04/2011, 13:37
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: pasar i como parametro de una funcion dentro de un loop

Cita:
Iniciado por mayid Ver Mensaje
Estoy trabajando con IE.
El final me lo dañaste

Ahora ¿cuál es la idea? Es para que te puedan sugerir una mejor forma o guiarte mejor.

Edito:
Trata usando la palabra clave this. Eso hace referencia al objeto, el usar las variables provoca que te seleccione el último, porque hace referencia a la variable no al valor de la variable. Mira este tema para que tengas una mejor idea http://www.forosdelweb.com/f13/claus...lacion-900897/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 05/04/2011 a las 13:47
  #3 (permalink)  
Antiguo 05/04/2011, 13:50
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: pasar i como parametro de una funcion dentro de un loop

Gracias por los comentarios y el enlace.

La idea es que me ayuden a que las variables se evaluen en el loop, y se pasen como valor y no como variable. Eso es lo que esta fallando.

Antes de hacer eventos así, probe con attachEvent pero pasar variables era un lio, pero eso uso la sintaxis .onclick

EDITO: lo de this... no se como aplicarlo a mi caso. Creo que el origen esta en el envio de las variables, no en la recepcion de parametros....

Última edición por mayid; 05/04/2011 a las 13:55
  #4 (permalink)  
Antiguo 05/04/2011, 14:09
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: pasar i como parametro de una funcion dentro de un loop

Que tal mayid,

proba con algo así, a ver si te sirve:

Código Javascript:
Ver original
  1. for (var i=0; i<cantidadOpciones; i++)
  2. {      
  3.     indexOpcion = comboOriginal.options[i].index;
  4.  
  5.     itemCombo = document.createElement('a');
  6.     itemCombo.id  = "input"+indexOpcion;
  7.     itemCombo.href = "#"+indexOpcion;
  8.     itemCombo.innerHTML = comboOriginal.options[i].text;        
  9.          
  10.     itemCombo.onclick = (function(e) {
  11.       var idx   = indexOpcion;
  12.       var combo = combo_id;
  13.       return function() {
  14.         seleccionar(combo, idx);
  15.         return false;
  16.       }
  17.     })();
  18.    
  19.     divDesplegable.appendChild(itemCombo);                
  20. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 05/04/2011 a las 14:15 Razón: pifie en sintaxis
  #5 (permalink)  
Antiguo 05/04/2011, 14:20
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: pasar i como parametro de una funcion dentro de un loop

Esto por si mismo no funciono:
Código Javascript:
Ver original
  1. var id = combo_id;
  2. var index    = indexOpcion;
  3. itemCombo.onclick = function(){ seleccionar( id, index ); return false; };

Y poniendolo así no me retorna nada, o al menos no veo nada con un alert desde seleccionar():

Código Javascript:
Ver original
  1. itemCombo.onclick = function(){
  2.          
  3.                   var id = combo_id;
  4.                   var index    = indexOpcion;
  5.                   return function() {
  6.                     seleccionar(id, index);
  7.                     return false;
  8.                   }
  9.                   return false;
  10.                  
  11.                   };
  #6 (permalink)  
Antiguo 05/04/2011, 14:25
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: pasar i como parametro de una funcion dentro de un loop

no es lo mismo mayid, míralo bien, en mi ejemplo es una funcion anónima que se autoejecuta

Código Javascript:
Ver original
  1. itemCombo.onclick = (function(e) {
  2.       var idx   = indexOpcion;
  3.       var combo = combo_id;
  4.       return function() {
  5.         seleccionar(combo, idx);
  6.         return false;
  7.       }
  8.  })();
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 05/04/2011, 15:43
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: pasar i como parametro de una funcion dentro de un loop

ok. gracias a todos.

Esto funciono:

Código Javascript:
Ver original
  1. ...
  2. itemCombo.alt = combo_id;
  3.          itemCombo.rel = indexOpcion;
  4.          itemCombo.innerHTML = comboOriginal.options[i].text;
  5.        
  6.          itemCombo.onclick = function(){                                
  7.                                   seleccionar( this );
  8.                                   return false;
  9.                                   };

Código Javascript:
Ver original
  1. function seleccionar( link ){  
  2.    
  3.     combo_id = link.alt;
  4.     indexOpcion = link.rel;
  5. ...
  6. }

Etiquetas: funcion, loop, pasar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:33.