Foros del Web » Programando para Internet » Javascript »

Checkbox: seleccionar "casi" todos

Estas en el tema de Checkbox: seleccionar "casi" todos en el foro de Javascript en Foros del Web. Tengo un form con dos grupos de checkbox, dentro del mismo formulario. Y necesito un "seleccionar todos" independiente para cada grupo. <tr> <td>TEXTO A</td> <td><input ...
  #1 (permalink)  
Antiguo 31/05/2007, 13:14
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 4 meses
Puntos: 0
Checkbox: seleccionar "casi" todos

Tengo un form con dos grupos de checkbox, dentro del mismo formulario.
Y necesito un "seleccionar todos" independiente para cada grupo.

<tr>
<td>TEXTO A</td>
<td><input type="checkbox" name="Grupo_1A" value="XXX"></td>
<td><input type="checkbox" name="Grupo_2A" value="YYY"></td>
</tr>
<tr>
<td>TEXTO B</td>
<td><input type="checkbox" name="Grupo_1B" value="XXX"></td>
<td><input type="checkbox" name="Grupo_2B" value="YYY"></td>
</tr>
<tr>
<td>TEXTO C</td>
<td><input type="checkbox" name="Grupo_1C" value="XXX"></td>
<td><input type="checkbox" name="Grupo_2C" value="YYY"></td>
</tr>

ETC....

Con el buscador del foro, encontré este muy buen ejemplo:http://www.forosdelweb.com/f13/seleccionar-grupos-checkbox-490465/

El problema es que no puedo utilizar divs, ya que el formato del formulario es un td con dos columnas de checkbox y en html, y no puedo agruparlos de ese modo.

Necesitaría un "seleccionar todos" para el "Grupo_1X" y otro "seleccionar todos" para el "Grupo_2X" sin depender de DIVs. COmo puedo hacer?
  #2 (permalink)  
Antiguo 31/05/2007, 13:57
Avatar de TurKa  
Fecha de Ingreso: enero-2003
Ubicación: Gerli, Avellaneda
Mensajes: 543
Antigüedad: 21 años, 4 meses
Puntos: 4
Re: Checkbox: seleccionar "casi" todos

Si todos los checkbox tienen nombre distinto, pero como pones en el ejemplo, todos los del mismo grupo terminan con el mismo caracter (en tu ejemplo, misma letra "B" o "C"), podés probar con este codigo:

Código HTML:
<script language="javascript">
function seleccionar_todo(form,grupo,marca){
	for (i=0;i<form.elements.length;i++) {
		if(form.elements[i].type == "checkbox") {
			ultimo = form.elements[i].name.length-1;
			if(form.elements[i].name.charAt(ultimo) == grupo) {
				form.elements[i].checked=marca;
			}
		}
	}
} 
</script>
<form name="formu">
<b>TEXTO B:</b><br>
<input type="checkbox" name="Grupo_1B" value="XXX">1B<br>
<input type="checkbox" name="Grupo_2B" value="YYY">2B<br>
<b>TEXTO C:</b><br>
<input type="checkbox" name="Grupo_1C" value="XXX">1C<br>
<input type="checkbox" name="Grupo_2C" value="YYY">2C<br>
<input type="button" value="Marca todos los B" name="todosB" onClick="seleccionar_todo(this.form,'B',1)">
<input type="button" value="Marca todos los C" name="todosC" onClick="seleccionar_todo(this.form,'C',1)"><br>
<input type="button" value="Desmarcar todos los B" name="destodosB" onClick="seleccionar_todo(this.form,'B',0)">
<input type="button" value="Desmarcar todos los C" name="destodosC" onClick="seleccionar_todo(this.form,'C',0)">
</form> 
Saludos!
__________________
Programación LAMP con Scrum y XP
www.eugeniabahit.com.com.ar
  #3 (permalink)  
Antiguo 31/05/2007, 14:19
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 7 meses
Puntos: 45
Re: Checkbox: seleccionar "casi" todos

Puedes recorrer todos los elementos que sean de tag input dentro de la tabla, y los que sean de type checkbox y además su name contenga Grupo_X, siendo X pasado por argumento a la función entonces marcarlo, y los que no reunan esas condiciones no marcarlos:

Código PHP:
<table id="laTabla">
    <
tr>
        <
td>TEXTO A</td>
        <
td><input type="checkbox" name="Grupo_1A" value="XXX"></td>
        <
td><input type="checkbox" name="Grupo_2A" value="YYY"></td>
    </
tr>
    <
tr>
        <
td>TEXTO B</td>
        <
td><input type="checkbox" name="Grupo_1B" value="XXX"></td>
        <
td><input type="checkbox" name="Grupo_2B" value="YYY"></td>
    </
tr>
    <
tr>
        <
td>TEXTO C</td>
        <
td><input type="checkbox" name="Grupo_1C" value="XXX"></td>
        <
td><input type="checkbox" name="Grupo_2C" value="YYY"></td>
    </
tr>
</
table>

<
input type="button" onclick="todosCheck('laTabla','1')" value="marca sólo grupo 1" />
<
input type="button" onclick="todosCheck('laTabla','2')" value="marca sólo grupo 2" />

<
script>

function 
todosCheck(tabla,grupo) {
    var 
checks=document.getElementById(tabla).getElementsByTagName("input");
    for(var 
i in checks) {
        if( 
checks[i].type=="checkbox" && checks[i].name.indexOf("Grupo_"+grupo)!=-)
            
checks[i].checked="checked";
        else
            
checks[i].checked="";
    }
}

</script> 


Espero que cojas la idea.



Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 31/05/2007, 14:21
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 7 meses
Puntos: 45
Re: Checkbox: seleccionar "casi" todos

Ups, choqué contigo TurKa!

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 31/05/2007, 14:39
Avatar de TurKa  
Fecha de Ingreso: enero-2003
Ubicación: Gerli, Avellaneda
Mensajes: 543
Antigüedad: 21 años, 4 meses
Puntos: 4
Re: Checkbox: seleccionar "casi" todos

Cita:
Iniciado por derkenuke Ver Mensaje
Ups, choqué contigo TurKa!

jajajajaja, a mi me pasó mil veces!!!!! Pero igual está bueno!!! dos respuestas a falta de una... buenísimo

Saludos!!
__________________
Programación LAMP con Scrum y XP
www.eugeniabahit.com.com.ar
  #6 (permalink)  
Antiguo 31/05/2007, 16:05
Avatar de programeitor  
Fecha de Ingreso: febrero-2005
Mensajes: 994
Antigüedad: 19 años, 3 meses
Puntos: 9
Re: Checkbox: seleccionar "casi" todos

Código PHP:
function fun(x)
{
var 
ii=document.getElementById("tabla").getElementsByTagName("INPUT")
for(var 
n=0;n<ii.length;n++)
{
if(
ii[n].name.indexOf("Grupo_"+x)=="0")
{
ii[n].checked=ii[x-1].checked?true:false
}
}

Mira ,con este script tienes lo que buscas. Solo tienes que darle ID a la tabla. ·x· es el numero de grupo.

Saludos.
  #7 (permalink)  
Antiguo 31/05/2007, 16:27
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 4 meses
Puntos: 0
Re: Checkbox: seleccionar "casi" todos

Gracias chicos por la ayuda, pero no me sirve del todo.

Si pongo que seleccione todos los del Grupo1, me deselecciona los del Grupo2, y visceversa.
Debería ser independiente. Si aprieto en "seleccionar todos los del Grupo 1", se deberían seleccionar todos los del 1 sin importar que suceda en el 2. Lo mismo con el Grupo2 si lo seleccionase.

Del mismo modo, si destildo "seleccionar todos los del Grupo1", se deberían deseleccionar los del grupo 1 sin importar como estén los del Grupo2.

A su vez, creo que cometí un error con los nombres de los checkbox, para lo cual pido disculpas. No terminan con la misma letra. En uno de los grupos terminan con [] ya que los tomo después en con php, y en el otro grupo terminan con el valor del Grupo1. Con esta corrección, sería así:

<tr>
<td>TEXTO A</td>
<td><input type="checkbox" name="participantes[]" value="AAA"></td>
<td><input type="checkbox" name="tipo_AAA" value="1"></td>
</tr>
<tr>
<td>TEXTO B</td>
<td><input type="checkbox" name="participantes[]" value="BBB"></td>
<td><input type="checkbox" name="tipo_BBB" value="1"></td>
</tr>
<tr>
<td>TEXTO C</td>
<td><input type="checkbox" name="participantes[]" value="CCC"></td>
<td><input type="checkbox" name="tipo_CCC" value="1"></td>
</tr>

Última edición por chancha; 31/05/2007 a las 16:34
  #8 (permalink)  
Antiguo 31/05/2007, 16:39
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 7 meses
Puntos: 45
Re: Checkbox: seleccionar "casi" todos

Bueno, en mi código por lo menos sólo tienes que eliminar el else, y en el argumento grupo en vez de llamarlo "grupo" podrías llamarlo parteDeName y buscar en el atributo name parteDeName, si coincide marcas, y si no, no haces nada.

Una posible llamada a todosCheck(tabla,parteDeName) --> todosCheck('laTabla', 'familiares_') o todosCheck('laTabla', 'participantes[]').


Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #9 (permalink)  
Antiguo 31/05/2007, 17:49
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 4 meses
Puntos: 0
Re: Checkbox: seleccionar "casi" todos

Cita:
Iniciado por derkenuke Ver Mensaje
Bueno, en mi código por lo menos sólo tienes que eliminar el else, y en el argumento grupo en vez de llamarlo "grupo" podrías llamarlo parteDeName y buscar en el atributo name parteDeName, si coincide marcas, y si no, no haces nada.

Una posible llamada a todosCheck(tabla,parteDeName) --> todosCheck('laTabla', 'familiares_') o todosCheck('laTabla', 'participantes[]').


Saludos.
No soy muy bueno programando y menos javascript, y no termino de resolverlo. Como sería lo que me decís?. Gracias

Última edición por chancha; 31/05/2007 a las 18:11
  #10 (permalink)  
Antiguo 01/06/2007, 17:56
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 7 meses
Puntos: 45
Re: Checkbox: seleccionar "casi" todos

Pues en mi ejemplo sería así (no lo he probado, lo he modificado in situ

Código PHP:
<table id="laTabla">
    <
tr>
        <
td>TEXTO A</td>
        <
td><input type="checkbox" name="Grupo_1A" value="XXX"></td>
        <
td><input type="checkbox" name="Grupo_2A" value="YYY"></td>
    </
tr>
    <
tr>
        <
td>TEXTO B</td>
        <
td><input type="checkbox" name="Grupo_1B" value="XXX"></td>
        <
td><input type="checkbox" name="Grupo_2B" value="YYY"></td>
    </
tr>
    <
tr>
        <
td>TEXTO C</td>
        <
td><input type="checkbox" name="Grupo_1C" value="XXX"></td>
        <
td><input type="checkbox" name="Grupo_2C" value="YYY"></td>
    </
tr>
</
table>

<
input type="button" onclick="todosCheck('laTabla','1')" value="marca sólo grupo 1" />
<
input type="button" onclick="todosCheck('laTabla','2')" value="marca sólo grupo 2" />

<
script>

function 
todosCheck(tabla,parteDeName) {
    var 
checks=document.getElementById(tabla).getElementsByTagName("input");
    for(var 
i in checks) {
        if( 
checks[i].type=="checkbox" && checks[i].name.indexOf(parteDeName)!=-)
            
checks[i].checked="checked";
    }
}

</script> 

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 10:24.