Ver Mensaje Individual
  #7 (permalink)  
Antiguo 08/06/2012, 02:38
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 6 meses
Puntos: 154
Respuesta: Validar que se seleccione minimo un checkbox

Hola de nuevo,

Te pido disculpas por la respuesta anterior @emprear, estaba aún un poco dormido y no se me había ocurrido "discurrir" cómo adaptar tus enseñanzas a mis necesidades, por eso, ahora que estoy ya despierto del todo, me respondo a mi mismo y dejo aquí el código por si le sirve a alguien, conste que está todo basado en lo que inicialmente aportaste, @emprear (un millón de gracias)

Cita:
Iniciado por emprear Ver Mensaje

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>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <script languaje="javascript">
  7.  
  8. function verificar_uno(param){
  9. var cuales = param;
  10. var suma = 0;
  11. var marcando;
  12. var checks = document.getElementsByName('ids[]');
  13. for (var i = 0, j = checks.length; i < j; i++) {
  14.  
  15.  
  16.    // sumar los marcados
  17.   if(checks[i].checked == true){
  18.    suma++;
  19.    }
  20.    
  21. // marcar desmarcar todos (la función recibe un parámetro  
  22.    if(cuales == 'todos'){
  23.    checks[i].checked = true;
  24.     marcando = 1; // ponemos marcando en 1 para saber que no nos interesa procesar el form por ahora
  25.     }
  26.    
  27.    if(cuales == 'nada'){
  28.    checks[i].checked = false;
  29.     marcando = 1;
  30.     }
  31.  
  32. }
  33.  
  34.  
  35.  
  36. if(marcando != 1){
  37.  
  38. // si no sumo suma = 0, entonces
  39.     if(suma == 0){
  40.    alert('Debes seleccionar un registro');
  41.    return false;
  42.     }else{
  43.     //Confirmación para uno o varios   
  44.         if(suma == 1){
  45.         var texto = 'el usuario seleccionado';
  46.         }else{
  47.         var texto = 'los usuarios seleccionados';
  48.         }
  49.     var pregunta = confirm("¿Realmente deseas eliminar " + texto +"?")
  50.     if(pregunta){
  51.     // no haces nada y el form se procesa
  52.     }else{
  53.     alert('Operación cancelada');
  54.     // cancelas el envío
  55.     return false;
  56.     }
  57.    
  58.     }
  59.    
  60. }
  61.    
  62.    
  63. }
  64.  
  65.  
  66. </head>
  67. <form name="form" id="form" action="proceso.php" method="POST" onsubmit="return verificar_uno()">
  68. <tr>
  69.  
  70. <td>marcar todos<input type="radio" name="marcar" id="todos" onclick="verificar_uno(this.id)">desmarcar todos<input type="radio" name="marcar" id="nada" onclick="verificar_uno(this.id)"> </td>
  71. <td>ID</td>
  72. <td>Nombre</td>
  73. <td>Apellidos</td>
  74. <td varios></td>
  75.  
  76. <?php
  77. //Aquí hago las consultas para generar la parte dinámica de la tabla
  78. ?>
  79.  
  80. <tr>
  81.  
  82. <td><input type="checkbox" id="ids" name="ids[]" value="<?php echo $row[0] ?>"></td>
  83. <td><input type="checkbox" id="ids2" name="ids[]" value="<?php echo $row[0] ?>"></td>
  84. <td> </td>
  85.  
  86. </tr>
  87.  
  88. <tr>
  89.  
  90. <td colspan="5">
  91. <center>
  92. <input type="submit" name="submit" value="Eliminar seleccionados">
  93. <input type="submit" name="submit" value="Añadir Usuario">
  94. </div></center><br>
  95. </td>
  96. </tr>
  97. </form>
  98.  
  99. </body>
  100. </html>


Código Javascript:
Ver original
  1. function verificar_uno(){
  2. var suma = 0;
  3. var checks = document.getElementsByName('ids[]');
  4. for (var i = 0, j = checks.length; i < j; i++) {
  5.     if(checks[i].checked == true){
  6.     suma++;
  7.     }
  8. }
  9.  
  10. if(suma == 0){
  11.     alert('Debes seleccionar un registro');
  12.     return false;
  13. }
  14.  
  15. }
  16.  
  17. function verificar_varios(){
  18. var suma = 0;
  19. var checks = document.getElementsByName('ids[]');
  20. for (var i = 0, j = checks.length; i < j; i++) {
  21.     if(checks[i].checked == true){
  22.     suma++;
  23.     }
  24. }
  25.  
  26. if(suma < 2){
  27.     alert('Debes seleccionar al menos 2 registros');
  28.     return false;
  29. }
  30.  
  31. }
  32.  
  33. function verificar_borrar_uno(param){
  34. var cuales = param;
  35. var suma = 0;
  36. var checks = document.getElementsByName('ids[]');
  37. for (var i = 0, j = checks.length; i < j; i++) {
  38.  
  39.     // sumar los marcados
  40.    if(checks[i].checked == true){
  41.     suma++;
  42.     }
  43.  
  44. }
  45.  
  46. // si no sumo suma = 0, entonces
  47.     if(suma == 0){
  48.     alert('Debes seleccionar un registro');
  49.     return false;
  50.     }else{
  51.     //Confirmación para uno o varios    
  52.         if(suma == 1){
  53.         var texto = 'el usuario seleccionado';
  54.         }else{
  55.         var texto = 'los usuarios seleccionados';
  56.         }
  57.     var pregunta = confirm("¿Realmente deseas eliminar " + texto +"?")
  58.     if(pregunta){
  59.     // no haces nada y el form se procesa
  60.     }else{
  61.     // cancelas el envío
  62.     return false;
  63.     }
  64.    
  65.     }
  66.  
  67.  
  68.  }
  69.  
  70. function verificar_borrar_varios(param){
  71. var cuales = param;
  72. var suma = 0;
  73. var checks = document.getElementsByName('ids[]');
  74. for (var i = 0, j = checks.length; i < j; i++) {
  75.  
  76.     // sumar los marcados
  77.    if(checks[i].checked == true){
  78.     suma++;
  79.     }
  80.  
  81. }
  82.  
  83. // si no sumo suma = 0, entonces
  84.     if(suma < 2){
  85.     alert('Debes seleccionar al menos 2 registros');
  86.     return false;
  87.     }else{
  88.     //Confirmación para uno o varios    
  89.         if(suma == 1){
  90.         var texto = 'el usuario seleccionado';
  91.         }else{
  92.         var texto = 'los usuarios seleccionados';
  93.         }
  94.     var pregunta = confirm("¿Realmente deseas eliminar " + texto +"?")
  95.     if(pregunta){
  96.     // no haces nada y el form se procesa
  97.     }else{
  98.     // cancelas el envío
  99.     return false;
  100.     }
  101.    
  102.     }
  103.  
  104.  
  105.  }

Y luego llamo a las diferentes funciones (que más que diferentes son casi iguales) desde cada botón, dependiendo de la acción que vaya a realizar:

Código PHP:
Ver original
  1. <td colspan="15">
  2. <blockquote><b>Acciones en Masa:</b></blockquote>
  3.  
  4. <center>
  5. <input type="submit" name="submit" value="Borrar Usuarios" onclick="return verificar_borrar_varios()">
  6. <input type="submit" name="submit" value="Añadir al rotador" onclick="return verificar_varios();">
  7. </center><br>
  8.  
  9. <blockquote><b>Acciones sobre un sólo miembro:</b></blockquote>
  10.  
  11. <center>
  12. <input type="submit" name="submit" value="Editar Usuario" onclick="return verificar_uno();">
  13. <input type="submit" name="submit" value="Borrar Usuario" onclick="return verificar_borrar_uno()">
  14. <input type="submit" name="submit" value="Añadir Usuario" onclick="return verificar_uno();">
  15. </center>
  16. </td>

Esto seguro se puede depurar y mejorar, pero yo no lo se hacer... Pero por lo menos me ha servido para aprender un poco más y conseguir lo que necesitaba.