Foros del Web » Programando para Internet » Javascript »

permitir maximo checkbox por grupos

Estas en el tema de permitir maximo checkbox por grupos en el foro de Javascript en Foros del Web. Hola muy buenas, tengo un formulario que varias de sus preguntas son con checkbox, necesito que en cada pregunta que tenga un checkbox solo pueda ...
  #1 (permalink)  
Antiguo 26/10/2012, 09:49
 
Fecha de Ingreso: octubre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Exclamación permitir maximo checkbox por grupos

Hola muy buenas, tengo un formulario que varias de sus preguntas son con checkbox, necesito que en cada pregunta que tenga un checkbox solo pueda poner como maximo 3 chekeados.
Tengo algo parecido pero me coge todos los checkbox no por grupo.


Codigo js

Código:
function validacion(obj) {
  limite=3;                  
  num=0;
  if (obj.checked) {    
    for (i=0; ele=obj.form.elements[i]; i++)
      if (ele.checked) num++;   
  if (num>limite)
    obj.checked=false;
  }
} 


function validaciona(obj) {
limitea=3;
 numa=0;                        
  if (obj.checked) {    
    for (a=0; elea=obj.form.elements[a]; a++)
      if (elea.checked) numa++;
  if (numa>limitea)
    obj.checked=false;
  }
}
codigo html

1ºgrupo

Código HTML:
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="GNSS systems" onclick="at5n();onchange=validacion(this)"> GNSS systems
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="Hyperspectral remote sensing" onclick="at5n();onchange=validacion(this)"> Hyperspectral remote sensing
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="No deficiencies" onclick="at5n();onchange=validacion(this)"> No deficiencies
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="Cartography" onclick="at5n();onchange=validacion(this)"> Cartography

2º grupo
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="Surveying" onclick="at6n();onchange=validaciona(this)"> Surveying</p></label>
label><p><INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="Cadastre" onclick="at6n();onchange=validaciona(this)"> Cadastre
INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="Civil works surveying" onclick="at6n();onchange=validaciona(this)"> Civil works surveying
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="LiDAR" onclick="at6n();onchange=validaciona(this)"> LiDAR
Gracias de antemano

Última edición por stron1889; 26/10/2012 a las 10:21
  #2 (permalink)  
Antiguo 26/10/2012, 12:30
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: permitir maximo checkbox por grupos

Y no sería mejor agrupar tus preguntas por el name y utilizar
getElementsByName()

No entiendo porque si hay un grupo de pregunta 1 y un grupo de preguntas 2, ambos tienen por name PREGUNTA9

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 29/10/2012, 10:15
 
Fecha de Ingreso: octubre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: permitir maximo checkbox por grupos

Si me equivoque al ponerlo quedaria asi

Código:
function validacion(obj) {
  limite=3;                  
  num=0;
  if (obj.checked) {    
    for (i=0; ele=obj.form.elements[i]; i++)
      if (ele.checked) num++;   
  if (num>limite)
    obj.checked=false;
  }
} 


function validaciona(obj) {
limitea=3;
 numa=0;                        
  if (obj.checked) {    
    for (a=0; elea=obj.form.elements[a]; a++)
      if (elea.checked) numa++;
  if (numa>limitea)
    obj.checked=false;
  }
}
Código:
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="GNSS systems" onclick="at5n();onchange=validacion(this)"> GNSS systems
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="Hyperspectral remote sensing" onclick="at5n();onchange=validacion(this)"> Hyperspectral remote sensing
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="No deficiencies" onclick="at5n();onchange=validacion(this)"> No deficiencies
<INPUT TYPE="checkbox" NAME="PREGUNTA9" VALUE="Cartography" onclick="at5n();onchange=validacion(this)"> Cartography

2º grupo
<INPUT TYPE="checkbox" NAME="PREGUNTA10" VALUE="Surveying" onclick="at6n();onchange=validaciona(this)"> Surveying</p>
<INPUT TYPE="checkbox" NAME="PREGUNTA10" VALUE="Cadastre" onclick="at6n();onchange=validaciona(this)"> Cadastre
INPUT TYPE="checkbox" NAME="PREGUNTA10" VALUE="Civil works surveying" onclick="at6n();onchange=validaciona(this)"> Civil works surveying
<INPUT TYPE="checkbox" NAME="PREGUNTA10" VALUE="LiDAR" onclick="at6n();onchange=validaciona(this)"> LiDAR
y la verdad ahora que dices lo del nombre, creo que deberia de tener algo como PREGUNTA9-1, PREGUNTA9-2... ya que me gustaria almacenar en una base de datos los checked. ¿Como lo podria hacer con document.getElementsByName(name)?

Gracias
  #4 (permalink)  
Antiguo 29/10/2012, 10:18
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: permitir maximo checkbox por grupos

Mira para que puedas ser reconocida desde un lenguaje servidor debes hacerlo haciendo los name de esta manera

name = "pregunta9[]"

Para poder recorrerlo desde el JavaScript

document.getElementByName("pregunta9[]")

Con esto podrá ser reconocido como un array desde tu lenguaje servidor

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 29/10/2012, 10:42
 
Fecha de Ingreso: octubre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: permitir maximo checkbox por grupos

Si no fuera mucho pedir pedir ¿podrias poner el codigo?
  #6 (permalink)  
Antiguo 29/10/2012, 11:08
 
Fecha de Ingreso: octubre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: permitir maximo checkbox por grupos

he editado lo siguiente y lo he medio conseguido, el problema es que segun vas pulsando se van desactivando las anteriores hasta que solo se quedan activadas las 3 primeras ( ya que cuento 3 desde que empieza el bucle)

Código:
function validacion() { 
 var suma = 0;                  
 var x = document.getElementsByName("PREGUNTA9[]");
for (var i = 0, j = x.length; i < j; i++) {
    if(x[i].checked == true){   
    suma++;
    } 
    if (suma == 3){
        x[i].checked=false;

        }
}
}
Código HTML:
Ver original
  1. <INPUT TYPE="checkbox" NAME="PREGUNTA9[]" VALUE="GNSS systems" onclick="at5n();onchange=validacion(this)"> GNSS systems
  2. <INPUT TYPE="checkbox" NAME="PREGUNTA9[]" VALUE="Hyperspectral remote sensing" onclick="at5n();onchange=validacion(this)"> Hyperspectral remote sensing
  3. <INPUT TYPE="checkbox" NAME="PREGUNTA9[]" VALUE="No deficiencies" onclick="at5n();onchange=validacion(this)"> No deficiencies
  4. <INPUT TYPE="checkbox" NAME="PREGUNTA9[]" VALUE="Cartography" onclick="at5n();onchange=validacion(this)"> Cartography
  #7 (permalink)  
Antiguo 29/10/2012, 13:30
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: permitir maximo checkbox por grupos

En tanto i crezca siempre será el último. Y el limite debería ser > que no == que
De todas maneras hacer esto es más flexible

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>Contar checkboxes marcados</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. function limitar(grupo,limite){
  9. var grupo=document.getElementsByName(grupo);
  10. var limite=limite
  11. for (var i=0; i < grupo.length; i++){
  12.  grupo[i].onchange=function(){
  13.  var tildados=0
  14.  for (var i=0; i < grupo.length; i++)
  15.   tildados+=(grupo[i].checked)? 1 : 0
  16.  if (tildados > limite){
  17.   alert("solo se permiten "+limite+" selecciones")
  18.   this.checked=false
  19.   }
  20.  }
  21. }
  22. }
  23.  
  24. //]]>
  25. </head>
  26. <form action="#">
  27. <p>
  28. <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> a<br />
  29. <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> b<br />
  30. <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> c<br />
  31. <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> d<br />
  32. <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> e<br />
  33. </p>
  34.  
  35. <p>
  36. <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> f<br />
  37. <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> g<br />
  38. <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> h<br />
  39. <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> i<br />
  40. <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> j<br />
  41. </p>
  42.  
  43. </form>
  44. </body>
  45. </html>

Podés cambiar el límite para cada grupo a tu gusto cambiando el parámetro

onchange="limitar(this.name,2);"
onchange="limitar(this.name,4);"
onchange="limitar(this.name,3);"
etc.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 05/11/2012, 10:25
 
Fecha de Ingreso: octubre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: permitir maximo checkbox por grupos

Buenas supongo que no deberia de preguntarlo aqui, pero como la duda a surgido de este codigo pues aqui lo digo.

Tengo este codigo
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3.     <html xmlns="http://www.w3.org/1999/xhtml">
  4.     <head>
  5.     <title>Contar checkboxes marcados</title>
  6.     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  7.     <script type="text/javascript">
  8.     //<![CDATA[
  9.    function limitar(grupo,limite){
  10.    var grupo=document.getElementsByName(grupo);
  11.    var limite=limite
  12.    for (var i=0; i < grupo.length; i++){
  13.     grupo[i].onchange=function(){
  14.     var tildados=0
  15.     for (var i=0; i < grupo.length; i++)
  16.      tildados+=(grupo[i].checked)? 1 : 0
  17.     if (tildados > limite){
  18.       alert("solo se permiten "+limite+" selecciones")
  19.       this.checked=false
  20.       }
  21.      }
  22.     }
  23.    }
  24.    
  25.    //]]>
  26.     </script>
  27.     </head>
  28.     <body>
  29.     <form action="#">
  30.     <p>
  31.     <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> a<br />
  32.     <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> b<br />
  33.     <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> c<br />
  34.     <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> d<br />
  35.     <input type="checkbox" name="PREGUNTA9[]" onchange="limitar(this.name,3);" /> e<br />
  36.     </p>
  37.      
  38.     <p>
  39.     <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> f<br />
  40.     <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> g<br />
  41.     <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> h<br />
  42.     <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> i<br />
  43.     <input type="checkbox" name="PREGUNTA10[]" onchange="limitar(this.name,2);" /> j<br />
  44.     </p>
  45.      
  46.     </form>
  47.     </body>
  48.     </html>

Y funciona correctamente pero el problema viene cuando lo intento pasar a la base de datos.
¿Cual es el problema? Que si clickeo 3 checkbox y pulso en enviar da igual cual de ellos pulse que a la base de datos me enviara los 3 primeros como correctos(pasandome el valor que le defini) y los demas en 0.

este es el codigo php

Código PHP:
$pregunta9$_REQUEST['PREGUNTA9'];
$pregunta91 $pregunta9[0];
$pregunta92 $pregunta9[1];
$pregunta93 $pregunta9[2];
$pregunta94 $pregunta9[3];
$pregunta95 $pregunta9[4]; 
Una vez mas gracias.
  #9 (permalink)  
Antiguo 05/11/2012, 10:53
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: permitir maximo checkbox por grupos

Ese es un problema básico de php no de javascript
Analizá este código:
http://www.forosdelweb.com/f13/conta...4/#post4171339

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: checkbox, checked
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 07:40.