Foros del Web » Creando para Internet » HTML »

Pasar array de name con sus values.

Estas en el tema de Pasar array de name con sus values. en el foro de HTML en Foros del Web. Tengo lo siguiente: <input type="checkbox" name="n_check[]" > <input type="checkbox" name="n_check[]" > <input type="checkbox" name="n_check[]" > Posteriormente los mando por POST. Pero al no seleccionar los ...
  #1 (permalink)  
Antiguo 11/02/2013, 15:44
 
Fecha de Ingreso: diciembre-2012
Mensajes: 69
Antigüedad: 11 años, 11 meses
Puntos: 0
Pasar array de name con sus values.

Tengo lo siguiente:

<input type="checkbox" name="n_check[]" >
<input type="checkbox" name="n_check[]" >
<input type="checkbox" name="n_check[]" >


Posteriormente los mando por POST.

Pero al no seleccionar los name, el tamaño del arreglo se decrementa :S. es decir no sucede lo mismo que con los type="text".
Necesito: Obtener todos los array de los checkbox que tienen name de arreglo.

Espero haberme explicado, gracias
  #2 (permalink)  
Antiguo 11/02/2013, 16:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Pasar array de name con sus values.

Ese comportamiento es normal ya que los campos tipo checkbox solo son enviados cuando se seleccionan.

Una técnica consiste en crear campos fantasma antes de los reales, los campos fantasma tendrían los valores por defecto en caso de no marcar ningún checkbox.

Código HTML:
<input type="hidden" name="foo[0]">
<input type="hidden" name="foo[1]">
<input type="hidden" name="foo[2]">

<input type="checkbox" name="foo[0]">
<input type="checkbox" name="foo[1]">
<input type="checkbox" name="foo[2]"> 
En caso de seleccionar un checkbox sobre-escribe el valor del campo fantasma, que claro, para que esto funcione debes enumerar los índices correctamente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/02/2013, 22:22
 
Fecha de Ingreso: diciembre-2012
Mensajes: 69
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Pasar array de name con sus values.

Gracias por la respuesta.

pero mi problema es que la aplicacion maneja demaciados checkbox agregados dinamicamente.

Por lo tanto con los hidden tiene una respuesta mas lenta al cargar el contenido.

Mi solución hasta el momento es obtener los datos por jquery mas o menos de esta manera
$('input[name="n_check[]"]').each( function () { ... . ...cargardatos+=this.val(). })
y mandarlos por ajax

ya que los name de arreglo no los obtiene cuando va vacio :(..

Si alguien sabe como mantener la persistencia de los name le agradeceria 10000 :)

SAludos..
  #4 (permalink)  
Antiguo 12/02/2013, 10:27
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: Pasar array de name con sus values.

Cita:
Iniciado por yonineitor Ver Mensaje
Tengo lo siguiente:

<input type="checkbox" name="n_check[]" >
<input type="checkbox" name="n_check[]" >
<input type="checkbox" name="n_check[]" >


Posteriormente los mando por POST.

Pero al no seleccionar los name, el tamaño del arreglo se decrementa :S. es decir no sucede lo mismo que con los type="text".
Necesito: Obtener todos los array de los checkbox que tienen name de arreglo.

Espero haberme explicado, gracias
Un enunciado más que confuso.

Vayamos por el lado del javascript y html primero
Los name no se seleccionan, se selecciona un cb que tiene un name
El tamaño del arreglo se decrementa?
Obtener todos los array de los checkbox???, en todo caso el conjunto de checkboxes de un mismo name podrían conformar un array.
que tienen name de arreglo??? tus cb tienen por name n_check, el agregado de [] servirá para construir un array en tu php, lo que se envía por post sigue siendo $_POST[n_check];, para el javascript es necesario, ya que podés construir un array de cb del mismo nombre con getElementsByName(), que funciona en todos los navegadores

A partir de ahi, lo que quieras hacer con ese jQuery ó con Ajax, ya no tengo idea

Código PHP:
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>Manejo de checkboxes javascript</title>
  6. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  7. <style type="text/css">
  8. /*<![CDATA[*/
  9. button{
  10. width: 300px;
  11. }
  12. /*]]>*/
  13. </style>
  14. <script type="text/javascript">
  15. //<![CDATA[
  16. var cb = [];
  17. function verifica(nombreGrupo){
  18. var n=0,cuales="";
  19. cb = document.getElementsByName(nombreGrupo);
  20. alert('El total de checkbox de name = ' + nombreGrupo + ' es: ' + cb.length);
  21.     for (var i = 0; i < cb.length; i++){
  22.     var e = parseInt(i);
  23.     alert('Valor del checkbox ' + (e+1) + ': ' + cb[i].value);
  24.         if(cb[i].checked == true){
  25.         cuales += cb[i].value + ' ';
  26.         n++;
  27.         }
  28.     } // fin loop
  29.     if(n == 0){
  30.     var mensaje = ' no hubo selección';
  31.     }else{
  32.     var mensaje = 'Se marcaron el/los checkbox de valor: ' + cuales
  33.     }
  34. alert('El total de checkbox marcados es: ' + n);
  35. alert(mensaje);
  36. document.getElementById('boxes').reset();
  37. }
  38. //]]>
  39. </script>
  40. </head>
  41. <body>
  42.    
  43. <?php
  44.  $link = "";
  45. if(isset($_POST['procesar'])){
  46. $opciones = $_POST['g_check'];
  47.  
  48. // Con esto te imprime cuales opciones se seleccionaron
  49. if(empty($opciones)){
  50. echo "<p>No hay opciones seleccionadas.</p>\n";
  51. }else{
  52. $totalSeleccionados = count($opciones);
  53. echo "<p>Se seleccionaron $totalSeleccionados opcion(s): ";
  54. for($i=0; $i < $totalSeleccionados; $i++){
  55. echo($opciones[$i] . " ");
  56.  
  57. }
  58. echo "</p>";
  59. }
  60.  
  61.        
  62. // una variante si querés saber si un checkbox en particular está seleccionado
  63. // lo pongo solo para dos, A y B, podés agregarla para el resto, se puede tambie extraer esta info
  64. // del resultado anterior, usa la función estaSeleccionado() al pie
  65.     if(estaSeleccionado('g_check','A')){
  66.     echo "<b>A se incluye en la selección</b><br />";
  67.     }
  68.     if(estaSeleccionado('g_check','B')){
  69.     echo "<b>B se incluye en la selección</b><br />";
  70.     }
  71.  
  72.   echo "<p><a href='" . $_SERVER['PHP_SELF'] . "'>Utilice este link para repetir el ejemplo</a></p>";
  73.  
  74.  
  75. } // cierre post procesar
  76.    
  77. function estaSeleccionado($nombreCb,$valorCB){
  78.     if(!empty($_POST[$nombreCb])){
  79.         foreach($_POST[$nombreCb] as $elValor){
  80.             if($elValor == $valorCB){
  81.             return true;
  82.             }
  83.         }
  84.     }
  85. return false;
  86. }
  87. ?> 
  88.    
  89.    
  90. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"  id="boxes">
  91. <div>Primer Grupo<br />
  92. A <input type="checkbox" name="g_check[]" value="A" />
  93. B <input type="checkbox" name="g_check[]" value="B" />
  94. C <input type="checkbox" name="g_check[]" value="C" />
  95. </div>
  96. <div>Segundo Grupo<br />
  97. D <input type="checkbox" name="g2_check" value="D" />
  98. E <input type="checkbox" name="g2_check" value="E" />
  99. F <input type="checkbox" name="g2_check" value="F" />
  100. H <input type="checkbox" name="g2_check" value="H" />
  101. I <input type="checkbox" name="g2_check" value="I" />
  102. </div>
  103. <input type="submit" name="procesar" value="procesar el grupo 1, solo ese grupo se pasa como array al php" />
  104. </form>
  105.  
  106. <div>
  107. Verificación con javascript<br/>
  108. <button onclick="verifica('g_check[]');">verificar grupo 1 : name = g_check[]</button><br />
  109. <button onclick="verifica('g2_check');">verificar grupo 2 : name = g2_check</button><br />
  110. </div>
  111. </body>
  112. </html>

Demo:
http://foros.emprear.com/php/boxes_js.php

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

Etiquetas: php
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 04:32.