Foros del Web » Programando para Internet » Javascript »

contar checkbox

Estas en el tema de contar checkbox en el foro de Javascript en Foros del Web. Hola, tengo una problema. Tengo un formulario con una serie de checkbox, creados dinámicamente en una tabla, y necesito recorrerlos para realizar una serie de ...
  #1 (permalink)  
Antiguo 11/01/2006, 10:19
 
Fecha de Ingreso: octubre-2004
Mensajes: 94
Antigüedad: 19 años, 6 meses
Puntos: 0
contar checkbox

Hola, tengo una problema.

Tengo un formulario con una serie de checkbox, creados dinámicamente en una tabla, y necesito recorrerlos para realizar una serie de operaciones con ellos.

Resulta que si sólamente hay un checkbox al intentar recorrerlo con la propiedad .length me da un alert undefined.

Aquí os mando un trozo de código por si se os ocurre algo.



documentosMarcados = 0;
listaDocumentos = '';

for (counter = 0; counter < document.forms[1].idCheck.length; counter++)
{
if (document.forms[1].idCheck[counter].checked)
{
listaDocumentos += document.forms[1].idCheck[counter].value + '-';
documentosMarcados += 1;
}
}


Saludos.
  #2 (permalink)  
Antiguo 11/01/2006, 11:13
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Lamentablemente, a pesar de que existe algo estándar para contar elementos con el mismo tag, un checkbox tiene el tag input que comparte con los radios, text y otros...

También hay forma estandar de recorrer elementos con el mismo atributo name, pero no funciona bien en explorer (que es el navegador más usado), así que es obligatorio hacer "piruetas" para que lo que quieres funcione en los todos los navegadores modernos (y no hablemos si deshabilitan javascript...)

Una pirueta sería meter todos los checkboxes en una capa (o en un fieldset, que se vería mejor) y luego recorrer los inputs con:

document.getElementById("capa_contenedora").getEle mentsByTagName("input");

Y si mezclas checkboxes con otros elementos, tendrías que diferenciarlos...

if (elemento[i].type == "checkbox")...

Si no lo entiendes bien, pon el código que tienes para ver como ayudarte.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 11/01/2006, 15:32
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
pues yo lo que haria es un ciclo while que se ejecute mientras que los checkboxes sean igual a null y voy contando. Puede que no sea lo mas óptimo pero no he logrado ni atrás ni alante que cosas como tu 'document.forms[1].idCheck.length' me funcionen. Nada, que soy un cacharrero y como que esto corre en el cliente... pues carga de trabajo para el cliente.
__________________
El último TipdaR
  #4 (permalink)  
Antiguo 11/01/2006, 16:34
Avatar de dacmonsalve  
Fecha de Ingreso: noviembre-2005
Ubicación: Colombia Tierra querida, himno de fe y armonia
Mensajes: 318
Antigüedad: 18 años, 5 meses
Puntos: 6
Mira a ver si te sirve este trozo de codigo......a mi me funciona

var i;
var variable;
for (i=0;i<frm.chkBox.length;i++){
if (frm.chkBox[i].checked){
variable += frm.chkBox[i].value;
}
}

.......SUERTE........
  #5 (permalink)  
Antiguo 12/01/2006, 02:48
 
Fecha de Ingreso: octubre-2004
Mensajes: 94
Antigüedad: 19 años, 6 meses
Puntos: 0
Al final lo he resuelto de la siguiente manera:

Resulta que si sólamente hay un check da un error undefined y si hay mas de uno lo hace bien.

Lo que he hecho es lo siguiente:

if (document.forms[1].idCheck.length==undefined) {
if (document.forms[1].idCheck.checked)
{
listaDocumentos += document.forms[1].idCheck.value + '-';
documentosMarcados += 1;
}
}
else {
for (counter = 0; counter < document.forms[1].idCheck.length; counter++)
{
if (document.forms[1].idCheck[counter].checked)
{
listaDocumentos += document.forms[1].idCheck[counter].value + '-';
documentosMarcados += 1;
}
}
}

Saludos y gracias
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:41.