Ayuda con form dinámico
Buenas,
tengo un formulario en el que quiero ir generando n textfields dinámicamente.
Los genero así:
<code>
document.getElementById('moreLink').style.display = 'none';
var d = document.createElement("div");
var txt = '<table border="0" cellpadding="0" cellspacing="0"><td><b>Archivo</b><br><input type="file" name="archivo'+upload_number+'" value="" onchange="setBlock();"></td>'
+ '<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>'
+ '<td><b>Categoría</b><br><select id="catadjunto'+upload_number+'" name="catadjunto'+upload_number+'"></select></td></table>';
d.innerHTML = txt;
document.getElementById("moreUploads").appendChild(d);</code>
Primero genero un div, que luego le inserto su innerHTML con los dos campos que he generado dinámicamente.
Después ese div creado, lo meto como hijo de un div que tengo en mitad del formulario.
Pues la creación me lo hace guay, pero cuando compruebo los datos del formulario surgen problemas. Los nuevos campos no se encuentran dentro del formulario. Sí que están (que se encuentran por el document.getElementById) pero no están reconocidos dentro del formulario.
Alguien sabría el porque?
zigotica
es que no me cansaré de repetirlo, para encontrar errores hay que aislar AL MAXIMO el codigo que falla, tenerlo en mil tablas no es la mejor ayuda que digamos.
y acostumbraos a usar el FireBug, hace maravillas. en tu caso, le he dado a inspect element, he visto la ruta al elemento y tachán, el form no estaba entre sus parent.
sgiraldo
jodó.
Era eso? Todo el día dando vueltas por eso.
thanks zigotica, te debo una birra.
zigotica
¿has probado a poner el FORM en otro sitio? Ahora mismo, por DOM no está en un sitio correcto, porque está en un espacio entre table y tbody. No hay ningun elemento valido ahi. metelo en un td, por ejemplo.
zigotica
a mi en FF me funciona como deberia...
el primer alert funciona (devuelve el objeto input)
el segundo no funciona (al no poder leer el valor del input file no salta el alert)
EDITO: no me hagas mucho caso, leer se puede leer, lo que no se puede es escribir. luego me miro por que no puedes leerlo y por que no sale el 2o alert
sgiraldo
perdon por el retraso.
http://www.sgiraldo.com/zwork/ejemplo.html
Si le das a adjuntar archivo sale el boton de añadir uploads. A partir de allí se añaden mediante createEmenent, como he puesto en el post.
Al darle aceptar: Primero sale el alert con el document.getElementById, pero luego no sale el que tocaría a document.f1.nombrecampo.
zigotica
de todos modos,, no sería mejor usar un array?
algo como
<code><input file="file" name="imagenes[]" /></code>
zigotica
de buen rollo, ultima oportunidad, cuelga TU ejemplo online please
sgiraldo
no, sinó quiero saber el valor que tiene.
Solo quiero saber si existe, pq luego lo envío a un php y quiero hacer los inserts pertinentes.
zigotica
repito, en eso que me pasas ahora tu podrias leer el CAPTION (input type=text)pero nunca el valor del FILE (input type=file).
por favor, pon una url con TU ejemplo
sgiraldo
estoy haciendo pruebas con esto:
http://eqinfo.ucsd.edu/~rnewman/howtos/dom_action.html
y la verdad es q poderse se puede, lo q pasa es que no sé en que estoy adaptando mal el código.
zigotica
por temas de seguridad javascript no puede leer el valor de un input type="file"
si no es eso, pega un ejemplo online
sgiraldo
Hola txuma,
he jugado con los DOM directamente, y sigue sin encontrarme los creados dinámicamente.
<code>
var d = document.createElement("div");
var upl = document.createElement("div");
upl.setAttribute('id','izqd');
var sele = document.createElement("div");
sele.setAttribute('id','decha');
var inp = document.createElement('input');
inp.type='file';
inp.name='archivo'+upload_number;
inp.id='archivo'+upload_number;
inp.onChange='setBlock();';
var sel = document.createElement('SELECT');
sel.name='catadjunto'+upload_number;
sel.id='catadjunto'+upload_number;
upl.appendChild(inp);
sele.appendChild(sel);
d.appendChild(upl);
d.appendChild(sele);
document.getElementById("moreUploads").appendChild(d);
</code>
El document.f1.archivo2 por ejemplo.. suda de mí. No por eso, el document.getElementById("archivo2");
Debería de indicarle de alguna manera que son pertenecientes del formulario?
txuma Plus
innerHTML es una solución práctica que se inventó Microsoft para ahorrar tiempo al crear nodos utilizando el DOM. La verdad que tuvo buena acogida y se ha implementado en casi todos los navegadores.
La alternativa que se me ocurre es precisamente crearlos con el DOM directamente, con los métodos para crear nuevos nodos: createElement(), createTextNode(); appenChild();
Salu2
P.D. Puede parecer que sé un huevo de esto, pero la realidad es que me habéis pillado con el manual delante, y acabo de leer ese capítulo hace un par de días :)