Foros del Web » Programando para Internet » Javascript »

Lio con document.createElement()

Estas en el tema de Lio con document.createElement() en el foro de Javascript en Foros del Web. Holas a tod@s, Estoy creando un script que permita hacer diseño de reportes. La idea es que el usuario indica el numero de columnas que ...
  #1 (permalink)  
Antiguo 02/11/2011, 08:31
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 20 años, 5 meses
Puntos: 8
Pregunta Lio con document.createElement()

Holas a tod@s,

Estoy creando un script que permita hacer diseño de reportes. La idea es que el usuario indica el numero de columnas que contiene el reporte. En ese momento hago el llamado a una funcion que crea la(s) columna(s) con sus respectivos atributos.

Este es codigo de la funcion:
Código PHP:
function crearFilas() {
/*
   var grups = document.getElementById("grupos").value;
   str = grups.trim();
*/
   
var cols document.getElementById("cols").value;

   var 
tr document.createElement("tr");
   
document.getElementById("reporte").appendChild(tr);

   
0;
   for (
i=0;i<cols;i++) {
       
idname "col"+i;
       var 
nuevoTD document.createElement("td");
            
nuevoTD.innerHTML=idname;
       
document.getElementById("reporte").appendChild(nuevoTD);

       var 
input document.createElement("input");
            
input.setAttribute("type""text");
            
input.setAttribute("id"idname);
            
input.setAttribute("name"idname);
            
input.setAttribute("class""claseinput");
            
input.setAttribute("style""width:30px;");
            
input.setAttribute("onChange""verificaInput("+i+")");
       
document.getElementById("reporte").appendChild(input);
   }
   var 
el document.getElementById("reporte");
   
el.style.display "block";

Esta función canciona bien desde el punto de vista que crea las columnas que se desean, el lío es que crea una fila por columna y quiero que en una sola fila se creen las columnas...

Algun@ de ustedes me puede indicar como lo puedo hacer?

Gracias de antemano por su ayuda

Un Cordial Saludo
  #2 (permalink)  
Antiguo 02/11/2011, 08:47
Avatar de Franz1628  
Fecha de Ingreso: marzo-2007
Ubicación: Lima - Perú
Mensajes: 145
Antigüedad: 17 años, 8 meses
Puntos: 26
Respuesta: Lio con document.createElement()

Debes añadir el input al tr

cambia esta linea
document.getElementById("reporte").appendChild(inp ut);
por esta
nuevoTD.appendChild(input);
__________________
En mi Blog puedes ver articulos javascript y más...
@Franz1628
  #3 (permalink)  
Antiguo 02/11/2011, 08:58
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 20 años, 5 meses
Puntos: 8
Respuesta: Lio con document.createElement()

Uyyyy papá..... usted si sabe donde ponen las garzas


Mil Gracias Frnz1628.... cancionó la vaina
  #4 (permalink)  
Antiguo 02/11/2011, 14:59
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 20 años, 5 meses
Puntos: 8
Respuesta: Lio con document.createElement()

Hola de nuevo,

Continuando con el tema, el script me está funcionando casi bien....

Resulta que en esta parte de la funcion

Código PHP:
function crear() {
   
tr document.createElement("tr");

   
1;
   
1;
   
col_orig cols;
   
cols grups*cols;
   for (
j=0;j<cols;j++) {
       
idnamec "col"+k+"_"+g;
       
nuevoTD document.createElement("td");
            
nuevoTD.setAttribute("colspan""1");
       
tbl.appendChild(nuevoTD);

       
input document.createElement("input");
            
input.setAttribute("type""text");
            
input.setAttribute("id"idnamec);
            
input.setAttribute("name"idnamec);
            
input.setAttribute("value""Titulo columna "+k);
            
input.setAttribute("class""claseinput");
            
input.setAttribute("style""width:140px; text-align:center; color:red;");
            
input.setAttribute("onChange""verificaInput(idnamec);");
       
nuevoTD.appendChild(input);
       
tbl.appendChild(nuevoTD);
       
k+1;
       if (
k>col_orig) {
          
g+1;
          
k=1;
       }
   }
   
tbl.appendChild(tr);
   
reporte.appendChild(tbl);
}

function 
verificaInput(id) {
alert(id);
   
alert(document.getElementById(id).value);

Se trata de lo siguiente:
El usuario desea crear dos grupos de columnas con tres columnas cada grupo (total de columnas 6). Con este script pretendo asignarle el atributo ID a cada INPUT TEXT definido como col[grupo]_[columna]. Es decir que el ID de la primera columna del grupo 1 seria col1_1, el ID de la primera columna del segundo grupo seria col2_1... Asi lo defino en la segunda linea del script y le asigno el atributo en la linea 8.

Para verificar esto le asigno otro atributo, onChange=verificaInput(idnamec); en la linea 19 del script. Al realizar una prueba del script veo con gran sorpresa que todos los ID son iguales al ultimo ID asignado, es decir, todos los ID son col3_2

Como puedo lograr que cada input text tenga el id correspondiente?

Mil gracias de antemano

Un Cordial Saludo
  #5 (permalink)  
Antiguo 02/11/2011, 16:41
Avatar de Franz1628  
Fecha de Ingreso: marzo-2007
Ubicación: Lima - Perú
Mensajes: 145
Antigüedad: 17 años, 8 meses
Puntos: 26
Respuesta: Lio con document.createElement()

pon completo el código
__________________
En mi Blog puedes ver articulos javascript y más...
@Franz1628
  #6 (permalink)  
Antiguo 02/11/2011, 17:03
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 20 años, 5 meses
Puntos: 8
Respuesta: Lio con document.createElement()

Ok Don Franz1628, ahi va,

Código PHP:
String.prototype.trim = function() { return this.replace(/^s+|s+$/g""); };

function 
crearFilas() {

   var 
reporte document.getElementById("reporte");

   var 
grups document.getElementById("grupos").value;
   
str grups.trim();
   var 
grups str;

   var 
cols document.getElementById("cols").value;
   
str cols.trim();
   var 
cols str;

   
tbl document.createElement("table");
   
tr document.createElement("tr");

   
0;
   
1;
   
largo = ((140*cols)+(3*cols));
   for (
i=0;i<grups;i++) {
       
idnameg="grp"+k+"_0";
       
nuevoTD document.createElement("td");
            
nuevoTD.setAttribute("colspan"cols);
       
tbl.appendChild(nuevoTD);

       
input document.createElement("input");
            
input.setAttribute("type""text");
            
input.setAttribute("id"idnameg);
            
input.setAttribute("name"idnameg);
            
input.setAttribute("value""Titulo Grupo "+k);
            
input.setAttribute("class""claseinput");
            
estilo "text-align:center; width:"+largo+"px; color:blue;";
            
input.setAttribute("style"estilo);
            
input.setAttribute("onChange""verificaInput(idnameg);");
       
nuevoTD.appendChild(input);
       
tbl.appendChild(nuevoTD);
       
k++;
   }
   
tbl.appendChild(tr);

   
tr document.createElement("tr");

   
1;
   
1;
   
col_orig cols;
   
cols grups*cols;
   for (
j=0;j<cols;j++) {
       
idnamec "col"+k+"_"+g;
       
nuevoTD document.createElement("td");
            
nuevoTD.setAttribute("colspan""1");
       
tbl.appendChild(nuevoTD);

       
input document.createElement("input");
            
input.setAttribute("type""text");
            
input.setAttribute("id"idnamec);
            
input.setAttribute("name"idnamec);
            
input.setAttribute("value""Titulo Columna "+k);
            
input.setAttribute("class""claseinput");
            
input.setAttribute("style""width:140px; text-align:center; color:red;");
            
input.setAttribute("onChange""verificaInput(idnamec);");
       
nuevoTD.appendChild(input);
       
tbl.appendChild(nuevoTD);
       
k+1;
       if (
k>col_orig) {
          
g+1;
          
k=1;
       }
   }
   
tbl.appendChild(tr);

   
tr document.createElement("tr");
   
1;
   
1;
   for (
j=0;j<cols;j++) {
       
idnames "sel"+k+"_"+g;
       
nuevoTD document.createElement("td");
            
nuevoTD.setAttribute("colspan""1");
       
tbl.appendChild(nuevoTD);

       
nuevoSelect document.createElement("select");
            
nuevoTD.setAttribute("id"idnames);
            
nuevoTD.setAttribute("name"idnames);
            
nuevoTD.setAttribute("onChange""verificaInput(idnames);");

       
opt document.createElement("Option");
         
opt.setAttribute("value""Seleccione Filtro");
         
opt.innerHTML="Seleccione Filtro";
         
opt.setAttribute("selected""");
       
nuevoSelect.appendChild(opt);

       
opt document.createElement("Option");
         
opt.setAttribute("value""Query");
         
opt.innerHTML="Query";
       
nuevoSelect.appendChild(opt);

       
opt document.createElement("Option");
         
opt.setAttribute("value""Formula");
         
opt.innerHTML="Formula";
       
nuevoSelect.appendChild(opt);

       
opt document.createElement("Option");
         
opt.setAttribute("value""Copiar Desde Otra Columna");
         
opt.innerHTML="Copiar Desde Columna";
       
nuevoSelect.appendChild(opt);

       
nuevoTD.appendChild(nuevoSelect);
       
tbl.appendChild(nuevoTD);
       if (
k>col_orig) {
          
g+1;
          
k=1;
       }
   }
   
tbl.appendChild(tr);

   
tr document.createElement("tr");

   
1;
   
1;
   for (
j=0;j<cols;j++) {
       
idnamet "txt"+k+"_"+g;
       
nuevoTD document.createElement("td");
            
nuevoTD.setAttribute("colspan""1");
       
tbl.appendChild(nuevoTD);

       
textarea document.createElement("textarea");
            
textarea.setAttribute("id"idnamet);
            
textarea.setAttribute("name"idnamet);
            
textarea.setAttribute("rows""30");
            
textarea.setAttribute("cols""17");
            
textarea.setAttribute("onChange""verificaInput(idnamet);");
            
textarea.setAttribute("disabled""disabled");
       
nuevoTD.appendChild(textarea);
       
tbl.appendChild(nuevoTD);
       
k+1;
       if (
k>col_orig) {
          
g+1;
          
k=1;
       }
   }
   
tbl.appendChild(tr);
   
reporte.appendChild(tbl);

   
reporte.style.display "block";
}

function 
verificaInput(id) {
alert(id);
   
alert(document.getElementById(id).value);

  #7 (permalink)  
Antiguo 02/11/2011, 20:02
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 20 años, 5 meses
Puntos: 8
Respuesta: Lio con document.createElement()

Listo.. solucionado ese pedacito...

Se tiene que cambiar
setAttribute("onChange", "verificaInput(idname);") por
setAttribute("onChange", "verificaInput(' "+idename+" ');");

Ahora viene el otro baile y es con los selectOptions: Al seleccionar alguna opcion se dispara el onChange(verificaInput( aca el id );) y si hago en la funcion verificaInput( aca el id ) alert(document.getElementById( aca el id ).value me reporta undefined... esto pasa solo con los selectOptions

ese pedacito me hace falta solucionar....

Alguna idea?

Mil Gracias de antemano

Un Cordial Saludo
  #8 (permalink)  
Antiguo 02/11/2011, 20:09
Avatar de Franz1628  
Fecha de Ingreso: marzo-2007
Ubicación: Lima - Perú
Mensajes: 145
Antigüedad: 17 años, 8 meses
Puntos: 26
Respuesta: Lio con document.createElement()

Ya estaba bien , sólo faltaba añadir los <td> a los <tr> y no los <td> a <table> como esta en tu codigo.

Este es el nuevo código
Código Javascript:
Ver original
  1. String.prototype.trim = function() { return this.replace(/^s+|s+$/g, ""); };
  2.  
  3. function crearFilas() {
  4.  
  5.    var reporte = document.getElementById("reporte");
  6.  
  7.    var grups = document.getElementById("grupos").value;
  8.    str = grups.trim();
  9.    var grups = str;
  10.  
  11.    var cols = document.getElementById("cols").value;
  12.    str = cols.trim();
  13.    var cols = str;
  14.  
  15.    tbl = document.createElement("table");
  16.    tr = document.createElement("tr");
  17.  
  18.    i = 0;
  19.    k = 1;
  20.    largo = ((140*cols)+(3*cols));
  21.    for (i=0;i<grups;i++) {
  22.        idnameg="grp"+k+"_0";
  23.        nuevoTD = document.createElement("td");
  24.             nuevoTD.setAttribute("colspan", cols);
  25.        tbl.appendChild(nuevoTD);
  26.  
  27.        input = document.createElement("input");
  28.             input.setAttribute("type", "text");
  29.             input.setAttribute("id", idnameg);
  30.             input.setAttribute("name", idnameg);
  31.             input.setAttribute("value", "Titulo Grupo "+k);
  32.             input.setAttribute("class", "claseinput");
  33.             estilo = "text-align:center; width:"+largo+"px; color:blue;";
  34.             input.setAttribute("style", estilo);
  35.             input.setAttribute("onChange", "verificaInput(idnameg);");
  36.        nuevoTD.appendChild(input);
  37.        tr.appendChild(nuevoTD);
  38.        k++;
  39.    }
  40.    
  41.    tbl.appendChild(tr);
  42.  
  43.    tr = document.createElement("tr");
  44.  
  45.    k = 1;
  46.    g = 1;
  47.    col_orig = cols;
  48.    cols = grups*cols;
  49.    for (j=0;j<cols;j++) {
  50.        idnamec = "col"+k+"_"+g;
  51.        nuevoTD = document.createElement("td");
  52.             nuevoTD.setAttribute("colspan", "1");
  53.        tbl.appendChild(nuevoTD);
  54.  
  55.        input = document.createElement("input");
  56.             input.setAttribute("type", "text");
  57.             input.setAttribute("id", idnamec);
  58.             input.setAttribute("name", idnamec);
  59.             input.setAttribute("value", "Titulo Columna "+k);
  60.             input.setAttribute("class", "claseinput");
  61.             input.setAttribute("style", "width:140px; text-align:center; color:red;");
  62.             input.setAttribute("onChange", "verificaInput(idnamec);");
  63.        nuevoTD.appendChild(input);
  64.        tr.appendChild(nuevoTD);
  65.        k = k+1;
  66.        if (k>col_orig) {
  67.           g = g+1;
  68.           k=1;
  69.        }
  70.    }
  71.    tbl.appendChild(tr);
  72.  
  73.    tr = document.createElement("tr");
  74.    k = 1;
  75.    g = 1;
  76.    for (j=0;j<cols;j++) {
  77.        idnames = "sel"+k+"_"+g;
  78.        nuevoTD = document.createElement("td");
  79.             nuevoTD.setAttribute("colspan", "1");
  80.        tr.appendChild(nuevoTD);
  81.  
  82.        nuevoSelect = document.createElement("select");
  83.             nuevoTD.setAttribute("id", idnames);
  84.             nuevoTD.setAttribute("name", idnames);
  85.             nuevoTD.setAttribute("onChange", "verificaInput(idnames);");
  86.  
  87.        opt = document.createElement("Option");
  88.          opt.setAttribute("value", "Seleccione Filtro");
  89.          opt.innerHTML="Seleccione Filtro";
  90.          opt.setAttribute("selected", "");
  91.        nuevoSelect.appendChild(opt);
  92.  
  93.        opt = document.createElement("Option");
  94.          opt.setAttribute("value", "Query");
  95.          opt.innerHTML="Query";
  96.        nuevoSelect.appendChild(opt);
  97.  
  98.        opt = document.createElement("Option");
  99.          opt.setAttribute("value", "Formula");
  100.          opt.innerHTML="Formula";
  101.        nuevoSelect.appendChild(opt);
  102.  
  103.        opt = document.createElement("Option");
  104.          opt.setAttribute("value", "Copiar Desde Otra Columna");
  105.          opt.innerHTML="Copiar Desde Columna";
  106.        nuevoSelect.appendChild(opt);
  107.  
  108.        nuevoTD.appendChild(nuevoSelect);
  109.        tr.appendChild(nuevoTD);
  110.        if (k>col_orig) {
  111.           g = g+1;
  112.           k=1;
  113.        }
  114.    }
  115.    tbl.appendChild(tr);
  116.  
  117.    tr = document.createElement("tr");
  118.  
  119.    k = 1;
  120.    g = 1;
  121.    for (j=0;j<cols;j++) {
  122.        idnamet = "txt"+k+"_"+g;
  123.        nuevoTD = document.createElement("td");
  124.             nuevoTD.setAttribute("colspan", "1");
  125.        tr.appendChild(nuevoTD);
  126.  
  127.        textarea = document.createElement("textarea");
  128.             textarea.setAttribute("id", idnamet);
  129.             textarea.setAttribute("name", idnamet);
  130.             textarea.setAttribute("rows", "30");
  131.             textarea.setAttribute("cols", "17");
  132.             textarea.setAttribute("onChange", "verificaInput(idnamet);");
  133.             textarea.setAttribute("disabled", "disabled");
  134.        nuevoTD.appendChild(textarea);
  135.        tr.appendChild(nuevoTD);
  136.        k = k+1;
  137.        if (k>col_orig) {
  138.           g = g+1;
  139.           k=1;
  140.        }
  141.    }
  142.    tbl.appendChild(tr);
  143.    reporte.appendChild(tbl);
  144.  
  145.    reporte.style.display = "block";
  146. }
  147.  
  148. function verificaInput(id) {
  149. alert(id);
  150.    alert(document.getElementById(id).value);
  151. }
__________________
En mi Blog puedes ver articulos javascript y más...
@Franz1628
  #9 (permalink)  
Antiguo 02/11/2011, 20:17
Avatar de Franz1628  
Fecha de Ingreso: marzo-2007
Ubicación: Lima - Perú
Mensajes: 145
Antigüedad: 17 años, 8 meses
Puntos: 26
Respuesta: Lio con document.createElement()

se supone que el atributo onchange debes ponerle a la etiqueta <select>
__________________
En mi Blog puedes ver articulos javascript y más...
@Franz1628
  #10 (permalink)  
Antiguo 02/11/2011, 20:26
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 20 años, 5 meses
Puntos: 8
Respuesta: Lio con document.createElement()

Que tal Don Franz1628,

Hay que corregir otra vaina en el código que me enviaste: en la declaración del nuevoSelect, lineas 83 a 85.... hay que cambiar los nuevoTD por nuevoSelect... fijate en el código que envié anterior al tuyo, así se me solucionó la vaina

Ahora lo que debo hacer es gestionar el formulario y enviar los datos al servidor mediante ajax para almacenarlos en la base de datos... Ya será mañana.

Te agradezco infinito...

Mil y mil, gracias...

Etiquetas: funcion, html, lio
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 06:21.