Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Obtener value de multiples checkbox

Estas en el tema de Obtener value de multiples checkbox en el foro de Javascript en Foros del Web. Hola que tal, tengo varios menus que dentro contienen un checkbox: Código: <ul class="menu1"> <li id="2"><input name="" type="checkbox" value="" /></li> <li id="6"><input name="" type="checkbox" value="" ...
  #1 (permalink)  
Antiguo 13/02/2014, 19:20
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 11 años, 5 meses
Puntos: 6
Obtener value de multiples checkbox

Hola que tal, tengo varios menus que dentro contienen un checkbox:
Código:
<ul class="menu1">
<li id="2"><input name="" type="checkbox" value="" /></li>
<li id="6"><input name="" type="checkbox" value="" /></li>
<li id="9"><input name="" type="checkbox" value="" /></li>
<li id="7"><input name="" type="checkbox" value="" /></li>
</ul>
Código:
<ul class="menu2">
<li id="9"><input name="" type="checkbox" value="" /></li>
<li id="2"><input name="" type="checkbox" value="" /></li>
<li id="6"><input name="" type="checkbox" value="" /></li>
<li id="1"><input name="" type="checkbox" value="" /></li>
</ul>
y al final tengo un boton:

Código:
<input type="submit" id="filter" />
Mi idea es crear un filtro, bueno lo que necesito es que cuando se precione el boton este recorra los menus y me añada en variables los id de los li cuyo checkbox este marcado para luego yo poder enviarlos por ajax.

Código:
$(document).on('click', '#filter', function() {

   var dataString = //aqui irian los valores obtenidos
		  
   $.ajax({
        type: "POST",
        url: url_data,
        data: dataString,
        success: function(data) {
          
        }
   });
		  
});
Si me pudieran ayudar estaria eternamente agradecido.
  #2 (permalink)  
Antiguo 13/02/2014, 20:39
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Obtener value de multiples checkbox

Básicamente, tomarías los menús por el nombre de la etiqueta (ul), luego, recorres con un bucle los menús tomados y en cada iteración tomas sus opciones (li), con otro bucle recorres la lista de opciones de cada menú y en cada iteración, tomas el checkbox que contiene y evalúas si está checkeado, de ser así, tomas el Id de la opción correspondiente a la iteración actual y lo añades a la variable dataString que será la que tendrá la query string final, concatenado con un signo de igualdad y el valor del checkbox respectivo.

Código HTML:
Ver original
  1. <ul class="menu1">
  2.     <li id="a"><input name="" type="checkbox" value="2" />2</li>
  3.     <li id="b"><input name="" type="checkbox" value="6" />6</li>
  4.     <li id="c"><input name="" type="checkbox" value="9" />9</li>
  5.     <li id="d"><input name="" type="checkbox" value="7" />7</li>
  6. </ul>
  7.  
  8. <ul class="menu2">
  9.     <li id="e"><input name="" type="checkbox" value="8" />8</li>
  10.     <li id="f"><input name="" type="checkbox" value="5" />5</li>
  11.     <li id="g"><input name="" type="checkbox" value="3" />3</li>
  12.     <li id="h"><input name="" type="checkbox" value="1" />1</li>
  13. </ul>
  14. <span id = "salida"></span>
  15. <button id = "filter">Filtrar</button>

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.     menus = document.getElementsByTagName("ul"),
  3.     total = menus.length,
  4.     salida = document.getElementById("salida");
  5.  
  6. filtrar.addEventListener("click", function(){
  7.     var dataString = "";
  8.  
  9.     for (i = 0; i < total; i++){
  10.         var opciones = menus[i].getElementsByTagName("li");
  11.    
  12.         for (j = 0, subTotal = opciones.length; j < subTotal; j++){
  13.             var checkbox = opciones[j].getElementsByTagName("input")[0];
  14.             if (checkbox.checked)
  15.                 dataString += dataString.length ? "&" + opciones[j].id + "=" + checkbox.value : opciones[j].id + "=" + checkbox.value;
  16.         }
  17.     }
  18.  
  19.     salida.innerHTML = "Resultado: " + dataString;
  20. }, false);

Así se ve en ejecución: http://jsbin.com/tovil/1

Por ejemplo, si marcaras las opciones 8 y 5 del segundo menú y las opciones 7 y 9 del primero, el resultado sería el siguiente:

Código HTML:
Ver original
  1. c=9&d=7&e=8&f=5

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 14/02/2014, 01:45
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Obtener value de multiples checkbox

Amigo la verdad esque eres un genio y con el ejemplo estuvo exelente la verdad esque no sabria como agradecerte no quisiera aprovecharme pero tengo algunas dudas no te sientas obligado a constestarlas pero si pudieras hecharme una ultima manita:

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.         menus = document.getElementsByTagName("ul"), //documen hace referencia al documento verdad? lo que sucede esque tengo un menu muy aparte del filtro y temo que lo cuente pero todos los menus del filtro los puedo agregar dentro de un div por lo que segun yo remplazando el document por $('iddeldiv') se solucionaria verdad.
  3.         total = menus.length,
  4.         salida = document.getElementById("salida");
  5.      
  6.     filtrar.addEventListener("click", function(){
  7.         var dataString = "";
  8.      
  9.         for (i = 0; i < total; i++){
  10.             var opciones = menus[i].getElementsByTagName("li");
  11.        
  12.             for (j = 0, subTotal = opciones.length; j < subTotal; j++){
  13.                 var checkbox = opciones[j].getElementsByTagName("input")[0];
  14.                 if (checkbox.checked)
  15.                     dataString += dataString.length ? "&" + opciones[j].id + "=" + checkbox.value : opciones[j].id + "=" + checkbox.value;
  16.             }
  17.         }
  18.      
  19.         salida.innerHTML = "Resultado: " + dataString;
  20.     }, false);

bueno asta hay bien pero tube que recurrir a incluir un select como podria incluirlo?

Código PHP:
Ver original
  1. <select class="_filter"  name="selected">
  2.    <option class="addfilter" value="7">7</option>
  3.    <option class="addfilter" value="3">3</option>
  4.    <option class="addfilter" value="9">9</option>                      
  5. </select>
  #4 (permalink)  
Antiguo 14/02/2014, 02:21
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Obtener value de multiples checkbox

Haber amigo trato de entenderlo:

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"), //Hace referencia al elemento cuyo id sea filter en este caso el boton
  2.             menus = document.getElementsByTagName("ul"), //En un arreglo se guardan todos los ul que existan en el documento
  3.             total = menus.length, //Calcula el total de elementos ul en este caso 2
  4.             salida = document.getElementById("salida");
  5.          
  6.         filtrar.addEventListener("click", function(){ //Dispara un evento al hacer click en el boton
  7.             var dataString = "";
  8.          
  9.             for (i = 0; i < total; i++){ //Hace una bucle por la cantidad de elementos ul encontrados en este caso 2
  10.                 var opciones = menus[i].getElementsByTagName("li"); //En una arreglo se guardan los li por ul el cual hace referencia la variable i
  11.            
  12.                 for (j = 0, subTotal = opciones.length; j < subTotal; j++){ //Repite por el numero de elementos li encontrados
  13.                     var checkbox = opciones[j].getElementsByTagName("input")[0]; //Guarda en un arreglo los input encontrados por elemento li empesando por el primero
  14.                     if (checkbox.checked) // si se encuentra un input checkbox checkeado
  15.                         dataString += dataString.length ? "&" + opciones[j].id + "=" + checkbox.value : opciones[j].id + "=" + checkbox.value;
  16.                         //Concantena la misma variable dependiendo el valor de una sentencia if y else (no me queda muy claro que muy claro que hace o significa +=)
  17.                 }
  18.             }
  19.          
  20.             salida.innerHTML = "Resultado: " + dataString; //imprime la variable
  21.         }, false);
  #5 (permalink)  
Antiguo 14/02/2014, 11:14
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Obtener value de multiples checkbox

Veo que lo entendiste perfectamente , ahora bien, no especificas en qué parte deseas incluir el <select>, si fuera en lugar de los checkbox, sería así:

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.     menus = document.getElementsByTagName("ul"),
  3.     total = menus.length,
  4.     salida = document.getElementById("salida");
  5.  
  6. filtrar.addEventListener("click", function(){
  7.     var dataString = "";
  8.  
  9.     for (i = 0; i < total; i++){
  10.         var opciones = menus[i].getElementsByTagName("li");
  11.    
  12.         for (j = 0, subTotal = opciones.length; j < subTotal; j++){
  13.             var select = opciones[j].getElementsByTagName("select")[0];
  14.             dataString += dataString.length ? "&" + opciones[j].id + "=" + select.value : opciones[j].id + "=" + select.value;
  15.         }
  16.     }
  17.  
  18.     salida.innerHTML = "Resultado: " + dataString;
  19. }, false);

Como verás, cambié el nombre de la etiqueta que tomo, en lugar de "input", ahora es "select", además, ya no necesito verificar si está marcado porque los <select> tienen un valor seleccionado por defecto que es el primero, si eliges otro, se mostrará el elegido. Ahora bien, así como está, mostrará los valores de todos los <select> y no creo que eso sea lo que quieres, de modo que te conviene aplicar una restricción:

Código HTML:
Ver original
  1. <select class="_filter"  name="selected">
  2.    <option class="addfilter" value="0">Seleccione un valor</option>
  3.    <option class="addfilter" value="7">7</option>
  4.    <option class="addfilter" value="3">3</option>
  5.    <option class="addfilter" value="9">9</option>                      

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.     menus = document.getElementsByTagName("ul"),
  3.     total = menus.length,
  4.     salida = document.getElementById("salida");
  5.  
  6. filtrar.addEventListener("click", function(){
  7.     var dataString = "";
  8.  
  9.     for (i = 0; i < total; i++){
  10.         var opciones = menus[i].getElementsByTagName("li");
  11.    
  12.         for (j = 0, subTotal = opciones.length; j < subTotal; j++){
  13.             var select = opciones[j].getElementsByTagName("select")[0];
  14.             if (select.value > 0)
  15.                 dataString += dataString.length ? "&" + opciones[j].id + "=" + select.value : opciones[j].id + "=" + select.value;
  16.         }
  17.     }
  18.  
  19.     salida.innerHTML = "Resultado: " + dataString;
  20. }, false);

Si te fijas, le añadí una opción con valor igual a cero al <select>, siendo ésta la primera opción, la que aparecerá por defecto, mientras que en el script, solamente añado el valor del <select> si es que es mayor a cero, de este modo, solamente se añadirán a dataString los valores de los <select> en los que el usuario haya elegido valores.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 14/02/2014, 12:05
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Obtener value de multiples checkbox

Gracias amigo mira la cosa resulta ser un poco mas compleja lamento no haberme expresado bien cundo me referia a que tuve que agregar otro select me referia a que aparte de los 2 elementos ul tube que agregar otro menu el cual es select debido a que este ultimo contiene demaciados registros osea que en total el filtro seria de 3 menus 2 elementos ul y 1 elemento select.
  #7 (permalink)  
Antiguo 14/02/2014, 12:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Obtener value de multiples checkbox

En ese caso, el único cambio que tienes que hacer consiste en buscar el <select> dentro del menú y no dentro del <li>.

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.     menus = document.getElementsByTagName("ul"),
  3.     total = menus.length,
  4.     salida = document.getElementById("salida");
  5.  
  6. filtrar.addEventListener("click", function(){
  7.     var dataString = "";
  8.  
  9.     for (i = 0; i < total; i++){
  10.         var opciones = menus[i].getElementsByTagName("li"),
  11.             select = menus[i].getElementsByTagName("select")[0];
  12.    
  13.         for (j = 0, subTotal = opciones.length; j < subTotal; j++){
  14.             var checkbox = opciones[j].getElementsByTagName("input")[0];
  15.             if (checkbox.checked)
  16.                 dataString += dataString.length ? "&" + opciones[j].id + "=" + checkbox.value : opciones[j].id + "=" + checkbox.value;
  17.         }
  18.  
  19.         if (select.value > 0)
  20.             dataString += dataString.length ? "&" + select.id + "=" + select.value : select.id + "=" + select.value;                    
  21.     }
  22.  
  23.     salida.innerHTML = "Resultado: " + dataString;
  24. }, false);

Como verás, añado los valores de los checkbox y luego el del <select> siempre y cuando se haya seleccionado un valor mayor a cero.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 14/02/2014, 12:29
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Obtener value de multiples checkbox

¡gracias ahora mismo lo pruebo!
  #9 (permalink)  
Antiguo 14/02/2014, 16:09
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Obtener value de multiples checkbox

Mira trate, trate pero al parecer entra en una especie de conflicto si pongo asi el codigo:
Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.     menus = document.getElementsByTagName("ul"),
  3.     total = menus.length,
  4.     salida = document.getElementById("salida");
  5.  
  6. filtrar.addEventListener("click", function(){
  7.     var dataString = "";
  8.  
  9.     for (i = 0; i < total; i++){
  10.         var opciones = menus[i].getElementsByTagName("li"),
  11.             select = menus[i].getElementsByTagName("select")[0];
  12.    
  13.         for (j = 0, subTotal = opciones.length; j < subTotal; j++){
  14.             var checkbox = opciones[j].getElementsByTagName("input")[0];
  15.             if (checkbox.checked)
  16.                 dataString += dataString.length ? "&" + opciones[j].id + "=" + checkbox.value : opciones[j].id + "=" + checkbox.value;
  17.         }
  18.  
  19.         if (select.value > 0)
  20.             dataString += dataString.length ? "&" + select.id + "=" + select.value : select.id + "=" + select.value;                    
  21.     }
  22.  
  23.     salida.innerHTML = "Resultado: " + dataString;
  24. }, false)

Asi como tal no funciona lo probe en el repocitorio y tampoco, le quito el codigo del select y ya funciona.

Última edición por cesa_r; 14/02/2014 a las 16:22
  #10 (permalink)  
Antiguo 14/02/2014, 17:13
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Obtener value de multiples checkbox

Despues de probar y probar me di cuenta que el problema estaba en que getElementsByTagName no encuentra el elemento select estube leyendo un poco del porque y creo que solo no funciona en firefox ni en opera igual estos dos son navegadores muy importantes por lo que recurri a identificar el select directamente muchisimas gracias por la ayuda que me brindaste no se me hubiera ocurrido nada mejor.
  #11 (permalink)  
Antiguo 14/02/2014, 17:15
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Obtener value de multiples checkbox

Creo que no entendí bien lo que habías dicho, entonces, ¿tu estructura sería así?:

Código HTML:
Ver original
  1. <ul>
  2.     <li id = "a">
  3.         <input type = "checkbox" value = "1" /> 1
  4.     </li>
  5.  
  6.     <li id = "b">
  7.         <input type = "checkbox" value = "2" /> 2
  8.     </li>
  9.  
  10.     <li id = "c">
  11.         <input type = "checkbox" value = "3" /> 3
  12.     </li>
  13. </ul>
  14.  
  15. <ul>
  16.     <li id = "d">
  17.         <input type = "checkbox" value = "4" /> 4
  18.     </li>
  19.  
  20.     <li id = "e">
  21.         <input type = "checkbox" value = "5" /> 5
  22.     </li>
  23.  
  24.     <li id = "f">
  25.         <input type = "checkbox" value = "6" /> 6
  26.     </li>
  27. </ul>
  28.  
  29. <select id = "g">
  30.     <option value = 0>Seleccione una opción</option>
  31.     <option value = 7>7</option>
  32.     <option value = 8>8</option>
  33.     <option value = 9>9</option>
  34.  
  35. <label id = "respuesta"></label>
  36. <button id = "filter">Filtrar</button>

Si fuera así, tendrías que hacerlo de este modo:

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.     select = document.getElementsByTagName("select")[0],
  3.     menus = document.getElementsByTagName("ul"),
  4.     total = menus.length,
  5.     salida = document.getElementById("salida");
  6.  
  7. filtrar.addEventListener("click", function(){
  8.     var dataString = "";
  9.  
  10.     for (i = 0; i < total; i++){
  11.         var opciones = menus[i].getElementsByTagName("li");
  12.         for (j = 0, subTotal = opciones.length; j < subTotal; j++){
  13.             var checkbox = opciones[j].getElementsByTagName("input")[0];
  14.             if (checkbox.checked)
  15.                 dataString += dataString.length ? "&" + opciones[j].id + "=" + checkbox.value : opciones[j].id + "=" + checkbox.value;
  16.         }                    
  17.     }
  18.  
  19.     if (select.value > 0)
  20.         dataString += dataString.length ? "&" + select.id + "=" + select.value : select.id + "=" + select.value;
  21.          
  22.     salida.innerHTML = "Resultado: " + dataString;
  23. }, false);

Como el <select> es un elemento independiente de los dos <ul>, lo tomas desde un principio, luego, la forma en como tomaba los valores de los checkbox sigue siendo la misma, finalmente, tomaría el valor seleccionado en el <select> si es que éste es mayor a cero.

Así se ve en ejecución: http://jsbin.com/tafev/1

Por si a caso, funciona bien en Chrome, Opera, Firefox, Safari y en IE.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #12 (permalink)  
Antiguo 15/02/2014, 01:18
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Obtener value de multiples checkbox

Acomodando un poco esto para adaptarlo a la explicación que te di en PHP, puedes hacerlo así:

Suponiendo que para elegir los valores de "genre" y "grade" usaras checkbox, sería recomendable que los diferencies por un nombre de clase, un grupo de checkbox con la clase "genre" y otro con la clase "grade", además, para los valores de "select_time" y "language", habrían dos <select> con sus Id respectivos.

Código Javascript:
Ver original
  1. var filtrar = document.getElementById("filter"),
  2.     language = document.getElementById("language").value,
  3.     select_time = document.getElementById("select_time").value,
  4.     checkGenre = document.getElementsByClassName("genre"),
  5.     checkGrade = document.getElementsByClassName("grade"),
  6.     genre = [], grade = [];
  7.  
  8. filtrar.addEventListener("click", function(){
  9.     for (var i in checkGenre){
  10.         if (checkGenre[i].checked)
  11.             genre.push(checkGenre[i].value);
  12.     }
  13.  
  14.     for (var j in checkGrade){
  15.         if (checkGrade[j].checked)
  16.             grade.push(checkGrade[j].value);
  17.     }
  18. }, false);

Con esto, ya tienes los valores exactamente como te lo señalé en el otro hilo en PHP, ahora, solamente te queda enviarlos con el método Ajax:

Código Javascript:
Ver original
  1. $.ajax({
  2.     url: "tuArchivo.php",
  3.     type: "GET",
  4.     data: {
  5.             grade: grade,
  6.             genre: genre,
  7.             select_time: select_time,
  8.             language: language
  9.           },
  10.     success: function(response){
  11.         //Acá haces algo con la respuesta del servidor
  12.     }
  13. });

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: ajax, checkbox, input, multiples, valor, variable
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 06:48.