Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Parámetros pasados entre funciones que cambian de tipo inexplicablemente.

Estas en el tema de Parámetros pasados entre funciones que cambian de tipo inexplicablemente. en el foro de Javascript en Foros del Web. Hola todos, (aclaro que soy aficionado). Tengo el siguiente código JS: Código HTML: function arbol(p,anchos,altos) { /* Formato de p: string tipo "nnnnn", donde n ...
  #1 (permalink)  
Antiguo 03/11/2013, 18:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 1
Parámetros pasados entre funciones que cambian de tipo inexplicablemente.

Hola todos,
(aclaro que soy aficionado).
Tengo el siguiente código JS:

Código HTML:
function arbol(p,anchos,altos) { /* Formato de p: string tipo "nnnnn", donde n es carácter numérico. Formato de anchos y altos: string tipo "nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,..." 
siendo TODOS SUS CARACTERES n dígitos numéricos o comas, y su longitud puede llegar a varias decenas de caracteres (en la versión final del código puede llegar a algunos miles) */
alert("Estoy en arbol...\n\n"+anchos+"\n\n"+altos); // Este alert funciona bien: PRESENTA LOS STRINGS anchos Y altos CORRECTAMENTE.
alert(typeof(anchos)+"    "+typeof(altos)); /* Este alert reporta correctamente el tipo de ambos argumentos como string y string. */
...
	// Llamada a la función show con evento onClick sobre el icono/carácter Unicode 📷
document.getElementById('iconos').innerHTML="<a href=\"javascript:void(0);\" class=\"pops\" title=\"Descripción...\" onClick=\"javascript:show("+p+","+anchos+","+altos+");\">&#x1F4F7;</a>";
...
}

function show(p,anchos,altos) { /* La función show está dentro del mismo documento .js que la función arbol. */
...
alert("Ahora estoy en show...\n\n"+anchos+"\n\n"+altos); /* Este alert presenta dos números como los parámetros anchos y altos que no tienen relación con los strings transferidos desde function arbol. */

alert(typeof(anchos)+"    "+typeof(altos)); /* Este alert reporta los parámetros anchos y altos como tipo “number”. */
...
}
...

El problema consiste en que en la función árbol (que recibe dos argumentos desde PHP llamados anchos y altos (ambos strings) y que queda demostrado que efectivamente son strings y que su contenido es el correcto, ya que lo compruebo con los dos alerts que ejecuto dentro de la función... dicho sea de paso: exportar desde PHP estos dos argumentos hacia la función árbol me costó dos días, ja, ja) se llama a la función show entregando esos dos mismos argumentos anchos y altos, pero al ser transferidos dichos dos argumentos se cambia automáticamente su tipo y su valor es un número que no tienen relación (al menos yo no la puedo ver) con el valor de los strings originales.

He probado con forzar la instrucción de definición del innerHTML de la etiqueta <a> en function árbol así:

Código HTML:
document.getElementById('iconos').innerHTML="<a href=\"javascript:void(0);\" class=\"pops\" title=\"Descripción...\" onClick=\"javascript:show("+p+","+String(anchos)+","+String(altos)+");\">&#x1F4F7;</a>";
pero el resultado es exactamente el mismo, erróneo.

No puedo ver dónde está el fallo. Gracias anticipadas por darme alguna orientación.
  #2 (permalink)  
Antiguo 04/11/2013, 03:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Parámetros pasados entre funciones que cambian de tipo inexplicablemente.

Misterio ninguno.... creo.


Código Javascript:
Ver original
  1. document.getElementById('iconos').innerHTML="<a href=\"javascript:void(0);\" class=\"pops\" title=\"Descripción...\" onClick=\"javascript:show('"+p+"','"+anchos+"','"+altos+"');\">&#x1F4F7;</a>";

Y si le agregas delimitadores?

show('"+p+"','"+anchos+"','"+altos+"');

Si p es "mmmm",
ancho="nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,n nnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn"
alto="yyyyyyy,yyyyy,yyyyy,yyyyyyyyy,yyyy"


El resultado de document.getElementById('iconos').innerHTML será

....show(mmmm,nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnn n,nnn,nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,yy yyyyy,yyyyy,yyyyy,yyyyyyyyy,yyyy)....

es decir una función con n argumentos de entrada....

con delimitadores seria

....show('mmmm','nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnn,nn nnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn','yyyyyyy,yyyyy,yyyyy,yyyyyyyyy,yyyy')....

Es decir solo tres argumentos de entrada. No?

Estas escribiento en el innerHTML luego en el momento que provocas el onclick ya no recuerda que esa parte venia de una variable.... el alert y el typeof de la primera función si saben que estan tratando con el contenido de una variable....

Fijate si el alert que has puesto en show te esta mostrando como ancho el primer grupo de digitos y como alto el segundo de lo que debería ser el ancho....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 04/11/2013 a las 04:08
  #3 (permalink)  
Antiguo 04/11/2013, 04:42
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Parámetros pasados entre funciones que cambian de tipo inexplicablemente.

Cita:
Iniciado por quimfv Ver Mensaje
Misterio ninguno.... creo.


Código Javascript:
Ver original
  1. document.getElementById('iconos').innerHTML="<a href=\"javascript:void(0);\" class=\"pops\" title=\"Descripción...\" onClick=\"javascript:show('"+p+"','"+anchos+"','"+altos+"');\">&#x1F4F7;</a>";

Y si le agregas delimitadores?

show('"+p+"','"+anchos+"','"+altos+"');

Si p es "mmmm",
ancho="nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,n nnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn"
alto="yyyyyyy,yyyyy,yyyyy,yyyyyyyyy,yyyy"


El resultado de document.getElementById('iconos').innerHTML será

....show(mmmm,nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnn n,nnn,nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,yy yyyyy,yyyyy,yyyyy,yyyyyyyyy,yyyy)....

es decir una función con n argumentos de entrada....

con delimitadores seria

....show('mmmm','nnnnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn,nnnnn,nn nnnnn,nnn,nnnnnnn,nnn,nnnnnnn,nnn','yyyyyyy,yyyyy,yyyyy,yyyyyyyyy,yyyy')....

Es decir solo tres argumentos de entrada. No?

Estas escribiento en el innerHTML luego en el momento que provocas el onclick ya no recuerda que esa parte venia de una variable.... el alert y el typeof de la primera función si saben que estan tratando con el contenido de una variable....

Fijate si el alert que has puesto en show te esta mostrando como ancho el primer grupo de digitos y como alto el segundo de lo que debería ser el ancho....
Muchas gracias quimfv, tu código funciona perfectamente.

Tu post es muy esclarecedor para mí, ya que mi cerebro no llegó a ver que function show recibía numerosos argumentos (muchos más que 3) desde function árbol, y además me has enseñado aspectos sobre el uso de comillas simples que no los tenía bien "establecidos" en mi mente. En otras palabras: no conocía la función "delimitadora" de las comillas simples.

Mil gracias nuevamente.

Etiquetas: funcion, funciones, js, php, tipo
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 04:20.