Foros del Web » Programando para Internet » Javascript »

Metiendo datos en masa en array con for me dice que el valor es Nulo

Estas en el tema de Metiendo datos en masa en array con for me dice que el valor es Nulo en el foro de Javascript en Foros del Web. Hola muchachos Pues bien, tengo dos arrays (os dejo el código) , uno que recoge un dato de un campo de texto y otro que ...
  #1 (permalink)  
Antiguo 05/06/2009, 14:01
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Metiendo datos en masa en array con for me dice que el valor es Nulo

Hola muchachos

Pues bien, tengo dos arrays (os dejo el código) , uno que recoge un dato de un campo de texto y otro que lo almacena para luego mostrarlo, todo esto dentro de un for que se hace las veces que se le pida. El problema es que ni siquiera empieza ya que me dice que es nulo el ("dato"+as):

Código:
	var num=document.getElementById("numentradas").value;
	var cosas=new Array();
	var dato=new Array();
	num=Number(num);

	for(i=0;i<=num;i++){
		var as=i+1;
		dato[i]=document.getElementById("dato"+as).value;
		cosas[i]=dato[i];
	}
Lo he probado de varias formas y no funciona de ninguna. He probado con while, recogiendo el dato sin array.... y nada. El dato es nulo. No pasa de ahí.

Mi navegador : firefox 3.0.8
Mi SO: Kubuntu 9.04

espero que alguien me pueda ayudar. Desde ya muchas gracias.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #2 (permalink)  
Antiguo 05/06/2009, 14:05
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

Hola CHuLoSoY

Supongo que tendrás los campo con los id dato1, dato2... Si pones un ejemplo del formulario que usar será más fácil ver donde está el fallo.

Saludos,
  #3 (permalink)  
Antiguo 05/06/2009, 14:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

¿Seguro que tienes un elemento con id dato1, dato2, dato3 ....?

EDITO: Hola Javier .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 05/06/2009, 14:13
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

Si, tengo un campo llamado numentradas que define el número total de entradas (campo texto).

Luego tengo un campo llamado dato1. Con un botón e innerHTML dejo crear un posible dato2, dato3, datoN, pero mínimo tiene que haber uno. Todo esto funciona bien. Ahora estaba intentando implementar que al pulsar el botón de añadir un campo, recorra todos los datos existentes (del 1 al N) y los vaya guardando en un array, para después de insertar el nuevo campo vacío (datoN+1) y rellene los anteriores datos con lo que hay en el array.

Es decir, debería comportarse algo así:

Javascript:
Código:
function hacercosas() {
numentradas=3;
cosas=new Array();

cosas[0]=document.getElementById("dato1").value;
cosas[1]=document.getElementById("dato2").value;
cosas[2]=document.getElementById("dato3").value;
}
HTML:
Código:
<input type=text id=dato1 value="asieio makoki">
<input type=text id=dato2 value="aoaoao">
<input type=text id=dato3 value="tercer dato">
cosas[0] debería contener ASIEIO MAKOKI así como cosas[2]="tercer dato"

Pero no va. :(

A ver si podemos hacer algo :)

Muchas gracias.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #5 (permalink)  
Antiguo 05/06/2009, 14:29
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

haz probado trabajar directamente sin mas variables
creo que esto podria funcionar

< algo name='datos' value='1'>
< algo name='datos' value='2'>
< algo name='datos' value='3'>

var frm = document.nombre_del_formulario;
for(i=0; i<=frm.datos.length ;i++){
cosas[] = frm.datos[i].value;
}

esto te podria orientar un poco mas
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #6 (permalink)  
Antiguo 05/06/2009, 15:05
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

Ufff, he avanzado UN POCO. Muchas gracias omar1977. Pero me dice undefined.
Vamos a ver. El código real es este:
Código:
<form name=cosas><div id=dondemeterlista style=overflow-y:auto;overflow-x:hidden;max-height:198;height:198;></div></form>
Al pulsar un botón de crear lista, se activa la siguiente función (que inicia si es ordenada o desordenada:

Código:
function crearLista() {

	var tipolista=document.getElementById("tipolista").value;
	var num=document.getElementById("numentradas").value;
	if(tipolista=="ul") {

		document.getElementById("numentradas").value=Number(num)+1;

		document.getElementById("dondemeterlista").innerHTML="<table width=100% border=0 cellspacing=0 cellpadding=0 style=font-size:9pt;><tr><td width=10% align=center><img src=img/listadesordenada.png border=0></td><td width=90%><input type=text name=dato class=urlhipervinculo style=padding:6px;></td></tr></table>";
		document.getElementById("tipolista").disabled="True";
		document.getElementById("crearlista").disabled="True";
	}
	if(tipolista=="ol") {

		document.getElementById("numentradas").value=Number(num)+1;

		document.getElementById("dondemeterlista").innerHTML="<table width=100% border=0 cellspacing=0 cellpadding=0 style=font-size:9pt;><tr><td width=10% align=center>1.</td><td width=90%><input type=text name=dato class=urlhipervinculo style=padding:6px;></td></tr></table>";
		document.getElementById("tipolista").disabled="True";
		document.getElementById("crearlista").disabled="True";
	}

}
Hasta aquí todo bien, funciona perfecto. Se inicia con 1 dato. Ahora, imagínate que entro un dato y pulso el botón de NUEVO ELEMENTO. Se activa esta función:

Código:
function nuevaEntradaLista() {

//	var tipolista=document.getElementById("tipolista").value;
//	var num=document.getElementById("numentradas").value;

	var frm=document.cosas;

	var datos=new Array();

	for(i=0;i<=frm.dato.length;i++){
		datos[i]=frm.dato[i].value;
	}

 //     frm.dato[i].disabled="True";

	if(tipolista=="ul") {

		document.getElementById("numentradas").value=Number(num)+1;
		var jaumeni=Number(num)+1;
		document.getElementById("dondemeterlista").innerHTML+="<table width=100% border=0 cellspacing=0 cellpadding=0 style=font-size:9pt;><tr><td width=10% align=center><img src=img/listadesordenada.png border=0></td><td width=90%><input type=text name=dato class=urlhipervinculo style=padding:6px;></td></tr></table><a name=abajo"+jaumeni+"></a>";
	}
	if(tipolista=="ol") {

		document.getElementById("numentradas").value=Number(num)+1;
		var jaumeni=Number(num)+1;
		document.getElementById("dondemeterlista").innerHTML+="<table width=100% border=0 cellspacing=0 cellpadding=0 style=font-size:9pt;><tr><td width=10% align=center>"+jaumeni+".</td><td width=90%><input type=text name=dato class=urlhipervinculo style=padding:6px;></textarea></td></tr></table><a name=abajo"+jaumeni+"></a>";
	}


	for(i=0;i<=frm.dato.length;i++){
		frm.dato[i].value=datos[i];
	}

}
Porqué tengo que recoger los datos anteriormente introducidos? Pues porque al hacer un innerHTML+= debería añadir un código a lo existente, y lo que hace es vaciar todos los campos de texto anteriores y añadir otro (no entiendo porqué los vacía). Entonces, cada vez que se añada un campo, necesito recorrer todos los campos de la lista, añadirlos a un array (o donde sea) y después de añadir el nuevo campo que se muestren todos los datos anteriores. PERO NO HAY MANERA.

¿Cómo lo haríais vosotros?
Mil gracias y un saludo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #7 (permalink)  
Antiguo 05/06/2009, 15:17
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

hay un metodo para los objetos (DOM) me parece que con appendChild podriamos solucionar el problema...... voy a leer un poco


me encontre esto en surfeando
link
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #8 (permalink)  
Antiguo 05/06/2009, 15:51
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

Nada, lo he probado de mil maneras y no hay forma. Eso que comentas del DOM lo veo demasiado complicado para mí.

No sé. A alguien se le ocurre alguna idea de hacerlo distinto?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #9 (permalink)  
Antiguo 05/06/2009, 17:04
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Metiendo datos en masa en array con for me dice que el valor es Nulo

Bueno, al final lo he hecho, pero menos visual. En vez de ir añadiendo viendo los anteriores, al añadir un campo se guarda el dato en un input temporal oculto y se crea un elemento nuevo. No es lo que pretendía pero funciona :)
Gracias por todo y un saludo!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
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 22:04.