Foros del Web » Programando para Internet » Javascript »

pasar array por parametro en una funcion

Estas en el tema de pasar array por parametro en una funcion en el foro de Javascript en Foros del Web. Hola a todos: Mi problema es que relleno un array y quiero pasarlo por parametro a una funcion javascript, pero no puedo. Se que se ...
  #1 (permalink)  
Antiguo 03/06/2010, 09:54
 
Fecha de Ingreso: abril-2010
Ubicación: L'Hospitalet de LLobregat
Mensajes: 43
Antigüedad: 14 años
Puntos: 0
Pregunta pasar array por parametro en una funcion

Hola a todos:

Mi problema es que relleno un array y quiero pasarlo por parametro a una funcion javascript, pero no puedo. Se que se ha rellenado bien de los datos del controlador ya que lo miro con el firebug, y veo lo siguiente:
Código:
tempArr[0]= new Producto(00,00,00,message,01,Joan,Josep,Vols ser el meu amic?);
tempArr[1]= new Producto(00,00,09,message,04,Josep,Joan,Si.);
Aquí va el código:

Código Javascript:
Ver original
  1. var tempArr = new Array();
  2.  
  3.         function  Producto(hora,minuto,segundo,tipo,numero,nombre1,nombre2,comentarios) {
  4.             this.hora = hora;
  5.             this.minuto = minuto;
  6.             this.segundo = segundo;
  7.             this.tipo = tipo;
  8.             this.numero = numero;
  9.             this.nombre1 = nombre1;
  10.             this.nombre2 = nombre2;
  11.             this.comentarios = comentarios;
  12.         }
  13.        
  14.         <g:each in="${list}" status="x" var="item" >
  15.             tempArr[${x}]= new Producto(${item.getHoras()},${item.getMinutos()},${item.getSegundos()},${item.getTipo()},${item.getNumero()},${item.getNombre1()},${item.getNombre2()},${item.getComentarios()});
  16.         </g:each>

Y el boton de la web donde quiero llamar a una funcion de un .js externo:
Código HTML:
Ver original
  1. <input name="a" type="button" onclick="play('tempArr')" value="play" />

Total, que intento recoger el parametro en el javascript externo y trabajar con el pero no funciona. Yo creo que es que tempArr solo existe dentro del trozo de codigo javascript, pero también he probado de hacer una llamada a una función(sin parametro) y esta a su vez llamara a play(tempArr) que esta en el .js externo, pero tampoco puedo!

Gracias por la ayuda!
  #2 (permalink)  
Antiguo 03/06/2010, 11:02
Avatar de donyoyo  
Fecha de Ingreso: mayo-2010
Ubicación: Chile
Mensajes: 31
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: pasar array por parametro en una funcion

estimado, debes cambiar la forma de llamada
<input name="a" type="button" onclick="play('tempArr')" value="play" />
por que así como lo tienes en la funcion, tempArr pasa a ser un string
tienes que dejarlo sin comillas
<input name="a" type="button" onclick="play(tempArr)" value="play" />
luego, tempArr en la funcion play la podras utilizar de la forma:
tempArr[0].hora

supongo que es:
function play(arreglo)
{
...
hora=arreglo[0].hora;
...
}
etc, arreglo ahora es tratado como array, con todas sus propiedades

espero te sirva
  #3 (permalink)  
Antiguo 03/06/2010, 11:16
 
Fecha de Ingreso: abril-2010
Ubicación: L'Hospitalet de LLobregat
Mensajes: 43
Antigüedad: 14 años
Puntos: 0
Respuesta: pasar array por parametro en una funcion

Acabo de probarlo como me has dicho y no me funciona... Lo que quiero hacer es justamente lo que dices, poder acceder a los atributos, pero es que en el momento que le doy al boton play, no hace nada

He leido por ahí que no se puede pasar un array de objetos a una funcion que esta en un javascript externo (como es el caso, array de productos) por parametro, sino que hay que pasarlo como array de strings y luego dentro de play, arregarlo para tenerlo como objeto...

Es cierto?

Espero vuestra ayuda, muchas gracias a todos!
  #4 (permalink)  
Antiguo 03/06/2010, 12:56
Avatar de donyoyo  
Fecha de Ingreso: mayo-2010
Ubicación: Chile
Mensajes: 31
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: pasar array por parametro en una funcion

porque no pruebas creando un arreglo con tags, y no como objeto, me explico:
lo mismo que tienes:
Código Javascript:
Ver original
  1. tempArr[0]= new Producto(00,00,00,message,01,Joan,Josep,Vols ser el meu amic?);
  2. tempArr[1]= new Producto(00,00,09,message,04,Josep,Joan,Si.);
cambiarlo a por:

Código Javascript:
Ver original
  1. tempArr[0]={hora:"00",minuto:"00",segundo:"00",tipo:"message",numero:"01",nombre1:"Joan",nombre2:"Josep",comentarios:"Vols ser el meu amic?"};
  2. tempArr[1]={hora:"00",minuto:"00",segundo:"09",tipo:"message",numero:"04",nombre1:"Josep",nombre2:"Joan",comentarios:"Si."};

asi vas a poder referenciar el arreglo como si fuera una estructura.
Código Javascript:
Ver original
  1. function play(arreglo)
  2. {
  3. ...
  4. hora=arreglo[0].hora;
  5. ...
  6. }

cuando hagas la invocación de la funcion

Código HTML:
Ver original
  1. <input name="a" type="button" onclick="play(tempArr)" value="play" />

ahi me cuentas

Última edición por donyoyo; 03/06/2010 a las 13:14
  #5 (permalink)  
Antiguo 04/06/2010, 12:06
 
Fecha de Ingreso: abril-2010
Ubicación: L'Hospitalet de LLobregat
Mensajes: 43
Antigüedad: 14 años
Puntos: 0
Respuesta: pasar array por parametro en una funcion

Lo he probado y tampoco me funciona :( mediante el firebug veo que si que se rellena bien, pero al darle al play me sigue sin hacer nada!!!!!
  #6 (permalink)  
Antiguo 05/06/2010, 07:37
 
Fecha de Ingreso: abril-2010
Ubicación: L'Hospitalet de LLobregat
Mensajes: 43
Antigüedad: 14 años
Puntos: 0
Respuesta: pasar array por parametro en una funcion

Para simplificar, estoy intentando pasar un string simple y mostrarlo mediante una funcion que esta en el javascript externo, pero tampoco me va!
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.         var hola = "pruebaaaa";
  3.      </script>
Y abajo, donde creo el boton, lo siguiente:
Código HTML:
Ver original
  1. <input name="a" type="button" onclick="prueba(hola)" value="play" />
Tal y como me has dicho, pero no funciona nada al presionar el botón, en cambio si pongo onclick="prueba('hola')" si que va. O sea, que el problema está en que no me coge la variable que he escrito de tipo javascript...
  #7 (permalink)  
Antiguo 05/06/2010, 07:53
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Respuesta: pasar array por parametro en una funcion

¿Pero si no pones un document.write() o algo cómo sabes que no te coge el valor de hola?
__________________
'Dadme un punto de apoyo y moveré el mundo' - Arquímedes
Alianza DIOSES [-GOD-] Ikariam - Mundo Ny (s13)
  #8 (permalink)  
Antiguo 05/06/2010, 08:05
 
Fecha de Ingreso: abril-2010
Ubicación: L'Hospitalet de LLobregat
Mensajes: 43
Antigüedad: 14 años
Puntos: 0
Respuesta: pasar array por parametro en una funcion

Porque tengo esta funcion en un javascript externo:
Código Javascript:
Ver original
  1. function prueba(a){
  2.     var msg_text = document.getElementById("msg_text");
  3.     ul = document.createElement("ul");
  4.     var li = document.createElement("li");
  5.     var mensajeMostrado= a;
  6.     li.innerHTML = mensajeMostrado;
  7.     ul.appendChild(li);
  8.     msg_text.appendChild(ul);
  9. }

Entonces poniendo onclick="prueba('hola')" me printa hola, pero si lo paso onclick="prueba(hola)" no funciona.
  #9 (permalink)  
Antiguo 05/06/2010, 09:05
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Respuesta: pasar array por parametro en una funcion

Claro porque interpreta que hola es algo definido anteriormente, pero al no tratarlo como un String no funciona. ¿No te dá un error del tipo 'hola is undefined' o algo así?
__________________
'Dadme un punto de apoyo y moveré el mundo' - Arquímedes
Alianza DIOSES [-GOD-] Ikariam - Mundo Ny (s13)
  #10 (permalink)  
Antiguo 05/06/2010, 09:19
 
Fecha de Ingreso: abril-2010
Ubicación: L'Hospitalet de LLobregat
Mensajes: 43
Antigüedad: 14 años
Puntos: 0
Respuesta: pasar array por parametro en una funcion

Vale, con un string "simple" o un array de "strings" ya he conseguido que me funcione:
Código Javascript:
Ver original
  1. <g:javascript>
  2.         var hola = "PUTOOOOOOO";
  3.     </g:javascript>
  4.     <g:javascript>
  5.         var arreglo = new Array();
  6.         arreglo[0] = "qwerty";
  7.         arreglo[1] = "pedo";
  8. </g:javascript>
Código HTML:
Ver original
  1. <input name="a" type="button" onclick='prueba(hola)' value="play" />
  2. <input name="b" type="button" onclick='prueba(arreglo)' value="play" />

El problema ahora esta en pasarle un array de objetos, o sea lo que hemos hablado al principio:
Código Javascript:
Ver original
  1. <g:javascript>
  2.         var tempArr = new Array();
  3.         <g:each in="${list}" status="x" var="item" >
  4.             tempArr[${x}]= {hora:${item.getHoras()},minuto:${item.getMinutos()},segundo:${item.getSegundos()},tipo:${item.getTipo()},numero:${item.getNumero()},nombre1:${item.getNombre1()},nombre2:${item.getNombre2()},comentarios:${item.getComentarios()}};
  5.         </g:each>
  6.         var asco=tempArr[0].hora;
  7. </g:javascript>

Y conseguir pasar tempArr entero o asco, que es el primer atributo de tempArr[0] (por probar vamos...) No funciona de ninguna de las dos maneras. Si veis el codigo algo raro, es que uso GSP y groovy/grails.
  #11 (permalink)  
Antiguo 05/06/2010, 10:08
 
Fecha de Ingreso: abril-2010
Ubicación: L'Hospitalet de LLobregat
Mensajes: 43
Antigüedad: 14 años
Puntos: 0
Respuesta: pasar array por parametro en una funcion

WEEEEEEEEEEEEEEEEEEEEEEEE por fin!!!!!!!!!!!

Cogiendo los datos por separadao en diferentes arrays, si me que va!!!! Seria asi:
Código Javascript:
Ver original
  1. <g:javascript>
  2.         var tempArr0 = new Array();
  3.         var tempArr1 = new Array();
  4.         var tempArr2 = new Array();
  5.         var tempArr3 = new Array();
  6.         var tempArr4 = new Array();
  7.         var tempArr5 = new Array();
  8.         var tempArr6 = new Array();
  9.         var tempArr7 = new Array();
  10.        
  11.         <g:each in="${list}" status="x" var="item" >
  12.             tempArr0[${x}]= "${item.getHoras()}";
  13.         </g:each>
  14.         <g:each in="${list}" status="x" var="item" >
  15.             tempArr1[${x}]= "${item.getMinutos()}";
  16.         </g:each>
  17.         <g:each in="${list}" status="x" var="item" >
  18.             tempArr2[${x}]= "${item.getSegundos()}";
  19.         </g:each>
  20.         <g:each in="${list}" status="x" var="item" >
  21.             tempArr3[${x}]= "${item.getTipo()}";
  22.         </g:each>
  23.         <g:each in="${list}" status="x" var="item" >
  24.             tempArr4[${x}]= "${item.getNumero()}";
  25.         </g:each>
  26.         <g:each in="${list}" status="x" var="item" >
  27.             tempArr5[${x}]= "${item.getNombre1()}";
  28.         </g:each>
  29.         <g:each in="${list}" status="x" var="item" >
  30.             tempArr6[${x}]= "${item.getNombre2()}";
  31.         </g:each>
  32.         <g:each in="${list}" status="x" var="item" >
  33.             tempArr7[${x}]= "${item.getComentarios()}";
  34.         </g:each>
  35.        
  36. </g:javascript>

Etiquetas: funcion, pasar, parámetros
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 21:00.