Foros del Web » Programando para Internet » Javascript »

Error en input file dinamico

Estas en el tema de Error en input file dinamico en el foro de Javascript en Foros del Web. Hola! Estoy realizando una aplicación para añadir ficheros a un alta y subirlos a un servidor. Como en un principio no se cuantos archivos se ...
  #1 (permalink)  
Antiguo 21/06/2010, 05:38
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 13 años, 10 meses
Puntos: 0
Error en input file dinamico

Hola!

Estoy realizando una aplicación para añadir ficheros a un alta y subirlos a un servidor. Como en un principio no se cuantos archivos se van a subir he creado una tabla donde voy añadiendo dinámicamente, mediante javascript filas donde en cada una de ellas creo un INPUT de tipo FILE.

Al input le añado los atributos id, type. El problema es que sino añado el atributo name al intentar recuperar el fichero con el servlet no lo encuentra, ya que creo que sólo encuentra los campos del formulario que tengan el name. Y si añado el
atributo name no lo está reconociendo y no lo está añadiendo al input. Además al añadir este atributo al input y al hacer el submit del formulario me da el error: "Access is denied".

Si alguien me pudiera ayudar estaría muy agradecido.

Pongo el código de la función donde creo el input:

function aniadirFilaFichero(fileTable, numRow)
{
// Creo nueva fila para el fichero
var trFile = fileTable.insertRow(numRow);
trFile.id = "filaFichero_" + numRow;
trFile.style.display = "none";
// Creo las columna para eliminar el fichero
var tdFile1 = trFile.insertCell(trFile.cells.length);
tdFile1.width = "30px";
tdFile1.align = "center";
tdFile1.num = numRow;
tdFile1.onmouseover = function(){ mbuttonOver('trash', this.num); };
tdFile1.onmouseout = function(){ mbuttonOut('trash', this.num); };
// Creo la imagen para borrar el fichero en la celda
var img = document.createElement("IMG");
img.id = "trash." + numRow + ".img";
img.num = numRow;
img.title = "Eliminar";
img.src = '<%=path%>' + "/img/icons/trash.gif";
img.onclick = function() { eliminarFicheroLista(this.num); };
tdFile1.appendChild(img);
// Creo la columna para el nombre del fichero
var tdFile2 = trFile.insertCell(trFile.cells.length);
tdFile2.noWrap = "nowrap";
tdFile2.title = "";
// Creo el campo para el nombre del fichero
var span = document.createElement("SPAN");
span.id = "spanFicheroNombre_" + numRow;
span.style.width = "600px";
tdFile2.appendChild(span);
// Creo el el input para guardar el file
var input = document.createElement("INPUT");
input.type = 'file';
input.id = 'fichero_' + numRow;
input.name = 'fichero_' + numRow;
tdFile2.appendChild(input);
}
  #2 (permalink)  
Antiguo 21/06/2010, 08:02
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Error en input file dinamico

Hola:

Los controles creados dinámicamente son bastante difíciles de tratar, por eso, yo suelo tener los contorles en la misma página con sus atributos y eventos, y simplemente clonarlos y añadirlos al formulario activo. Puedes ver como en mi página: Caricaturas individuales a color en acuarelas.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 21/06/2010, 12:22
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Error en input file dinamico

Lo primero darte las gracias por la respuesta caricatos!

Por lo que te entiendolo que me quieres decir es que por ejemplo en la misma jsp me cree otro formulario con los campos que vaya a necesitar y cuando los necesite en mi formulario simplemente los clone en vez de crearlos dinamicamente. Me parece una buena idea, la verdad es que no se me había ocurrido. Mañana lo probaré para ver si funciona. Si me puedes poner algún ejemplo te lo agradecería porque nunca he realizado esto aunque me parece haberlo visto consultando por ahí.

De todas formas buscando por google he leído que con IE7 puede dar problemas el crear el atributo name dinámicamente.

Muchas gracias y espero que funcione!!
  #4 (permalink)  
Antiguo 21/06/2010, 17:36
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Error en input file dinamico

Cita:
Iniciado por Ondetaper Ver Mensaje
... Si me puedes poner algún ejemplo te lo agradecería ...

Muchas gracias y espero que funcione!!
La misma página que estoy referenciando la pongo como ejemplo, y no hay problema en que leas el código fuente... (si te resulta complejo o al menos díficil, avisa... pero no creo que tengas problemas)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 22/06/2010, 03:09
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Error en input file dinamico

Gracias de nuevo caricatos!

La verdad es que no me di cuenta de que ya me habías puesto el ejemplo, lo siento. me he creado un formulario nuevo con el input.

Código HTML:
<FORM id="formClone" name="formClone">
  <INPUT name="fichero" id="fichero" type="file" value="" />
</FORM> 
Y he cambiado la función javascript por:

Código:
function aniadirFilaFichero(fileTable, numRow)
{
	// Creo nueva fila para el fichero
	var trFile = fileTable.insertRow(numRow);
	trFile.id = "filaFichero_" + numRow;
	trFile.style.display = "block";
	// Creo las columna para eliminar el fichero
	var tdFile1 = trFile.insertCell(trFile.cells.length);
	tdFile1.width = "30px";
	tdFile1.align = "center";
	tdFile1.num = numRow;
	tdFile1.onmouseover = function(){ mbuttonOver('trash', this.num); };
	tdFile1.onmouseout = function(){ mbuttonOut('trash', this.num); };
	// Creo la imagen para borrar el fichero en la celda
	var img = document.createElement("IMG");
	img.id = "trash." + numRow + ".img";
	img.num = numRow;
	img.title = "Eliminar";
	img.src = '<%=path%>' + "/img/icons/trash.gif";
	img.onclick = function() { eliminarFicheroLista(this.num); };
	tdFile1.appendChild(img);
	// Creo la columna para el nombre del fichero
	var tdFile2 = trFile.insertCell(trFile.cells.length);
	tdFile2.noWrap = "nowrap";
	tdFile2.title = "";
/*	// Creo el campo para el nombre del fichero
	var span = document.createElement("SPAN");
	span.id = "spanFicheroNombre_" + numRow;
	span.style.width = "600px";
	tdFile2.appendChild(span);
*/	// Creo el el input para guardar el file
	var input = document.formClone.fichero.cloneNode(true);
	input.id = 'fichero_' + numRow;

	tdFile2.appendChild(input);
}
Ahora ya me pone en el campo file el atributo name

Pero ahora me viene el segundo problema.... el evento click del botón file también lo hago desde javascript ya el botón que se pulsa es otro, que lo que hace es llamar a la función anterior y simular el evento click del file:

Código HTML:
function relacionarFicheroNuevo()
{
	// Cargo la tabla de ficheros
	var fileTable = document.getElementById('listaFicherosTable');
	var numRow = fileTable.rows.length;
	// Añado la nueva fila
	aniadirFilaFichero(fileTable, numRow);

	// Simulo el click del boton file
	var botonFile = document.getElementById('fichero_' + numRow);
	botonFile.click();
}
El problema es que cuando hago esto al hacer el submit de mi formulario me da el error "Access is denied". Lo raro es que si pulso de verdad es botón examininar del file no pasa y lo más raro aún es que si lo hago tal y como yo lo tengo pero en el input file le quito el atributo name también funciona!!!

A alguien se le ocurre porque el atributo name me puede estar dando este problema al simular el click????

Gracias de antemano.

Un saludo.

Etiquetas: dinamico, file, input
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 18:07.