Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema con checkboxes

Estas en el tema de Problema con checkboxes en el foro de Frameworks JS en Foros del Web. Saludos a todos. Estoy haciendo una aplicación de reservas de habitaciones con AJAX y en uno de los últimos pasos (una vez escogidas las habitaciones) ...
  #1 (permalink)  
Antiguo 17/04/2009, 04:15
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 1
Problema con checkboxes

Saludos a todos.

Estoy haciendo una aplicación de reservas de habitaciones con AJAX y en uno de los últimos pasos (una vez escogidas las habitaciones) quiero hacer un array con checkboxes en el que el usuario indicará si quiere algún extra para su habitación (un ramo de rosas, botellas de cava, bombones... Cosas por el estilo)

El caso es que los checkboxes los genero dinámicamente desde la base de datos, así:

Código PHP:
<input type="checkbox\" id=\"cb\" name=\"cb[]\" value=\"" $r_1["id_iExt"] . "-" $val["id"] . "\" /> 
El checkbox lleva dos valores, uno el id del extra solicitado (para buscarlo en la base de datos) y otro el id de la habitación para el que solicito el extra, separados ambos por un guion.

Después, en la parte de javascript, trato de procesar el array de este modo:

Código javascript:
Ver original
  1. arr_ckb = document.getElementById("cb");
  2.  
  3. arrEnv = "[";
  4.  
  5. for (x = 0; x < arr_ckb.leght; x ++)
  6. {
  7.     //En esta linea separo el id del extra seleccionado y el de la habitación
  8.     //creo que es justo donde está fallando
  9.     arrAux = arr_ckb[x].value.split('-');
  10.  
  11.     val = arrAux[0];
  12.     hab = arrAux[1];
  13.  
  14.     if (val == null)
  15.         val = 0
  16.  
  17.     if (x == (arr_ckb.leght - 1))
  18.         arrEnv = arrEnv + "{\"val\":" + val + ",\"hab\":" + hab + "}"
  19.     else
  20.         arrEnv = arrEnv + "{\"val\":" + val + ",\"hab\":" + hab + "},"
  21. }
  22.  
  23. arrEnv = arrEnv + "]";

Pero no me llega nada al siguiente script PHP (envío los arrays mediante JSON como hace poco aprendí en el foro) y al hacer un alert sobre arrEnv me muestra tan sólo un escueto '[]'

¿Alguien sabe si estoy obviando algo o haciéndolo mal?


Muchas gracias a todos y un saludo!
  #2 (permalink)  
Antiguo 17/04/2009, 05:29
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 1
Respuesta: Problema con checkboxes

He cambiado el modo de llamar al array de checkboxes de así:

Código javascript:
Ver original
  1. arr_ckb = document.getElementById("cb");

A así:

Código javascript:
Ver original
  1. arr_ckb = document.forms[0].elements["cb[]"];

Pero al entrar en la línea del for la consola de errores de firefox me dice que:

Código:
Error: arr_ckb is undefined
Por lo que entiendo que (tal y como sospechaba ) no me está tomando los datos correctamente... ¿Hay algo que esté obviando o que esté haciendo mal?



Muchas gracias a todos por vuestra ayuda.
  #3 (permalink)  
Antiguo 17/04/2009, 05:44
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con checkboxes

Vuelve al documentgetElementById(). Pon el código entero de la función, tal cual lo tienes.

Tiendes a poner legth en lugar de length. No sé si es un error al copiarlo aquí o si lo tienes así en tu código, pero está mal.

¿Por qué compruebas si val puede ser null?
  #4 (permalink)  
Antiguo 17/04/2009, 05:55
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 1
Respuesta: Problema con checkboxes

El código completo de mi función es:

Código javascript:
Ver original
  1. function checkFormChecks () {
  2.     arr_ckb = document.getElementById("cb");
  3.     ob_1 = document.getElementById("date1");
  4.     ob_2 = document.getElementById("date2");
  5.  
  6.     arrEnv = "[";
  7.  
  8.     for (x = 0; x < arr_ckb.length; x ++)
  9.     {
  10.         arrAux = arr_ckb[x].value.split('-');
  11.  
  12.         val = arrAux[0];
  13.         hab = arrAux[1];
  14.  
  15.         if (val == null)
  16.             val = 0
  17.  
  18.         if (x == (arr_ckb.length - 1))
  19.             arrEnv = arrEnv + "{\"val\":" + val + ",\"hab\":" + hab + "}"
  20.         else
  21.             arrEnv = arrEnv + "{\"val\":" + val + ",\"hab\":" + hab + "},"
  22.     }
  23.  
  24.     arrEnv = arrEnv + "]";
  25.  
  26.     ajax = objetoAjax ();
  27.  
  28.     ajax.open ("GET", "php/query3.php?arrEnv=" + arrEnv + "&date1=" + ob_1.value + "&date2=" + ob_2.value, true);
  29.  
  30.     ajax.onreadystatechange = function() {
  31.         if (ajax.readyState == 1) {
  32.             document.getElementById('step3').style.opacity = 1.0;
  33.             document.getElementById("formFinal").innerHTML = "<img src='img/ajax-loader.gif' title='Cargando...' alt='Cargando...'/>";
  34.         }
  35.         else if (ajax.readyState == 4) {
  36.             if (ajax.status == 200)
  37.                 document.getElementById("formFinal").innerHTML = ajax.responseText;
  38.             else if(ajax.status == 404)
  39.                 resultado.innerHTML = "Objeto no encontrado";
  40.             else
  41.                 resultado.innerHTML = "Error: " + ajax.status;
  42.         }
  43.     }
  44.     ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  45.     ajax.send(null);
  46. }

Tenías razón en que ponía mal el length, y gracias a que me has preguntado que para qué le preguntaba si era nulo me he dado cuenta de que sólo quiero guardar el valor de los id's seleccionados (los no seleccionados se los pasaré a PHP como 0 para que los controle) con lo que tendré que cambiar el código para que sólo introduzca en el vector a los arr_ckb[x].checked.

De todos modos, acabo de probar el script con getElementById y tampoco me funciona, así que debo seguir mirando.

Gracias por tu ayuda, venkman, un saludo.
  #5 (permalink)  
Antiguo 17/04/2009, 07:29
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con checkboxes

Y en este código, el error es el mismo (arr_ckb no está definido)?

¿En qué línea da el error, en el for seguro?

pon antes del for un alert(document.getElementById("cb")); y dime qué sale.
  #6 (permalink)  
Antiguo 18/04/2009, 03:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 1
Respuesta: Problema con checkboxes

Esto es lo que me dice al hacer el alert sobre document.getElementById("cb"):

Código:
[object HTMLInputElement]


Gracias por tu ayuda, venkman.
  #7 (permalink)  
Antiguo 18/04/2009, 04:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 1
Respuesta: Problema con checkboxes

Gracias por tu ayuda, venkman. Al final pude resolverlo mediante tu ayuda y la de caricatos, del que estuve leyendo varios posts como referencias.

Pese a todo, finalmente no lo hice mediante getElementById.

El código me ha quedado así:

Código javascript:
Ver original
  1. function checkFormChecks () {
  2.     ob_1 = document.getElementById("date1");
  3.     ob_2 = document.getElementById("date2");
  4.  
  5.     arrEnv = "[";
  6.  
  7.     for (x = 0; x < document.forms[0].elements["cb[]"].length; x ++)
  8.     {
  9.         arrAux = document.forms[0].elements["cb[" + x + "]"].value.split('-');
  10.  
  11.         val = arrAux[0];
  12.         hab = arrAux[1];
  13.  
  14.         if (!document.forms[0].elements["cb[" + x + "]"].checked)
  15.             val = 0
  16.  
  17.         if (x == (document.forms[0].elements["cb[]"].length - 1))
  18.             arrEnv = arrEnv + "{\"val\":" + val + ",\"hab\":" + hab + "}"
  19.         else
  20.             arrEnv = arrEnv + "{\"val\":" + val + ",\"hab\":" + hab + "},"
  21.     }
  22.  
  23.     arrEnv = arrEnv + "]";
  24.  
  25.     ajax = objetoAjax ();
  26.  
  27.     ajax.open ("GET", "php/query3.php?arrEnv=" + arrEnv + "&date1=" + ob_1.value + "&date2=" + ob_2.value, true);
  28.  
  29.     ajax.onreadystatechange = function() {
  30.         if (ajax.readyState == 1) {
  31.             document.getElementById('step3').style.opacity = 1.0;
  32.             document.getElementById("formFinal").innerHTML = "<img src='img/ajax-loader.gif' title='Cargando...' alt='Cargando...'/>";
  33.         }
  34.         else if (ajax.readyState == 4) {
  35.             if (ajax.status == 200)
  36.                 document.getElementById("formFinal").innerHTML = ajax.responseText;
  37.             else if(ajax.status == 404)
  38.                 resultado.innerHTML = "Objeto no encontrado";
  39.             else
  40.                 resultado.innerHTML = "Error: " + ajax.status;
  41.         }
  42.     }
  43.     ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  44.     ajax.send(null);
  45. }

¡Gracias por la ayuda!
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 17:44.