Foros del Web » Programando para Internet » Javascript »

Realizar una accion segun los checkbox marcados

Estas en el tema de Realizar una accion segun los checkbox marcados en el foro de Javascript en Foros del Web. Hola, tengo un formulario con varios checkbox y pretendo que al marcar un checkbox, me compruebe en un array los valores que cumplen esta condición ...
  #1 (permalink)  
Antiguo 29/06/2018, 01:34
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Realizar una accion segun los checkbox marcados

Hola, tengo un formulario con varios checkbox y pretendo que al marcar un checkbox, me compruebe en un array los valores que cumplen esta condición y si marco varios checkbox pues compruebe en el array los valores que cumplen todas las condiciones y muestre el resultado
Código HTML:
Ver original
  1. <form name="suscripcion" action="#">
  2. <h2>Temas que me interesan</h2>
  3. <input  type="checkbox" name="deportes" value="Deportes" />
  4.      <label for="deportes">Deportes</label><br/>
  5. <input type="checkbox" name="noticias" value="Noticias" />
  6.      <label for="noticias">Noticias</label><br/>
  7. <input type="checkbox" name="economia" value="Economia" />
  8.      <label for="economia">Economía</label><br/>
  9. <input  type="button"  name="ver" value="Ver Temas" onclick="info()" />
  10. </form>
Código Javascript:
Ver original
  1. var datos = new Array();
  2. datos =[["deportes","noticias","NO"],
  3. ["deportes","NO","economia"],
  4. ["NO","noticias","NO"],
  5. ["no","noticias","economia"],
  6. ["no","no","economia"],
  7. ["deportes","no","no"],
  8. ["deportes","noticias","economia"]];
  9.  
  10. function info() {
  11.     var txtDeportes = document.suscripcion.deportes.value.toLowerCase();
  12.     var txtNoticias = document.suscripcion.noticias.value.toLowerCase();
  13.     var txtEconomia = document.suscripcion.economia.value.toLowerCase();  
  14.     var encontrados = [];
  15.      
  16.      for(i=0;i<datos.length;i++){
  17.    
  18.     deportes = datos[i][0].indexOf(txtDeportes)>=0
  19.     noticias = datos[i][1].indexOf(txtNoticias)>=0
  20.     economia = datos[i][2].indexOf(txtEconomia)>=0
  21.    
  22.          if (document.suscripcion.deportes.checked == true) {          
  23.         if (deportes)              
  24.             encontrados.push(datos[i]);            
  25.          }
  26.          else { deportes = "" }
  27.          if (document.suscripcion.noticias.checked == true) {
  28.                 if (noticias)          
  29.             encontrados.push(datos[i]);
  30.             }
  31.          else { noticias = "" }
  32.          if (document.suscripcion.economia.checked == true) {
  33.             if (economia)
  34.             encontrados.push(datos[i]);
  35.             }  
  36.          else { economia = "" }
  37.        
  38.     }
  39.          
  40. alert(encontrados);
  41.  
  42. }
Si marco un sólo checkbox, el que sea este funciona perfectamente, pero no consigo que al marcar varios me cree el if correspondiente, por ejemplo si tengo marcado noticias y economía me debe crear el if siguiente
Código Javascript:
Ver original
  1. if (noticias && economia)
  2.         encontrados.push(datos[i]);

Última edición por pedromir; 29/06/2018 a las 01:37 Razón: Me faltaban unos datos
  #2 (permalink)  
Antiguo 29/06/2018, 08:57
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Realizar una accion segun los checkbox marcados

tu error es creer que por cada checkbox requieres un if, por eso te duplica datos... tienes que juntar todo en un solo IF

Código Javascript:
Ver original
  1. var chk_deportes = document.suscripcion.deportes.checked;
  2.         var chk_noticias = document.suscripcion.noticias.checked;
  3.         var chk_economia = document.suscripcion.economia.checked;
  4.  
  5.          for(i=0;i<datos.length;i++){
  6.        
  7.         deportes = datos[i][0].indexOf(txtDeportes)>=0
  8.         noticias = datos[i][1].indexOf(txtNoticias)>=0
  9.         economia = datos[i][2].indexOf(txtEconomia)>=0
  10.        
  11.              if ((chk_deportes && deportes) || (chk_noticias && noticias) || (chk_economia && economia)) {
  12.                 encontrados.push(datos[i]);            
  13.              }
  14.            
  15.         }


como comentario:

no veo la finalidad de usar esto

deportes = datos[i][0].indexOf(txtDeportes)>=0
noticias = datos[i][1].indexOf(txtNoticias)>=0
economia = datos[i][2].indexOf(txtEconomia)>=0

al usar un array de arrays con ese codigo das por entendido que conoces la estructura y por ejemplo la posición 0 siempre tendrá deportes
es mas fácil y rápido datos[i][0] == "deportes" o bien datos[i][0] != "NO"


algo mas util y dinámico es que en tu formulario tus input fueran un Array
<input type="checkbox" name="tag[]" value="deportes" />

y hacer uso de
https://developer.mozilla.org/es/doc...s/Array/filter

Última edición por ArturoGallegos; 29/06/2018 a las 09:16
  #3 (permalink)  
Antiguo 29/06/2018, 15:18
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Realizar una accion segun los checkbox marcados

Lo de usar esto
Código Javascript:
Ver original
  1. deportes = datos[i][0].indexOf(txtDeportes)>=0
Es porque tenia la intención de incluir un input text además de los checkbox y ahí si lo necesito y he utilizado esa estructura para todos los elementos, pero en los checkbox lo modificaré.
En cuanto al código lo que necesito es que si marcas deportes y noticias, compruebe en el array los que cumplen las dos condiciones y no cualquiera de ellas.
Así que tendría que ser así
Código Javascript:
Ver original
  1. if ((chk_deportes && deportes) && (chk_noticias && noticias) ) {
  2.                 encontrados.push(datos[i]);            
  3.              }
Pero en este caso, lógicamente sólo vale si marcas las dos opciones, si marcas una sólo no va
  #4 (permalink)  
Antiguo 29/06/2018, 16:31
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Realizar una accion segun los checkbox marcados

usa
https://developer.mozilla.org/es/doc...s/Array/filter

donde pongas un if y filter para condiconal
Código Javascript:
Ver original
  1. if(condicional_checkbox){
  2.     datos = datos.filter(....)
  3. }
  4. if(condicional_checkbox){
  5.     datos = datos.filter(....)
  6. }
  7. if(condicional_checkbox){
  8.     datos = datos.filter(....)
  9. }
  10. if(condicional_checkbox){
  11.     datos = datos.filter(....)
  12. }
  13.  
  14. console.log(datos);
  15. return datos;
  #5 (permalink)  
Antiguo 30/06/2018, 04:59
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Realizar una accion segun los checkbox marcados

En cuanto a mi código no seria posible recorrer los checkbox marcados, recoger el name de esos checkbox, por ejemplo si están activos deportes y noticias ahora tendríamos que asignar el name deportes a la variable deportes y el name noticias a la variable noticias y poner un join(' && ') para que separe las dos variables
Código Javascript:
Ver original
  1. for( j=0; j < los_elementos.length; j++ ) {
  2.     if (los_elementos[j].checked == true) {
  3.         mostrarName = los_elementos[j].name;
  4. if (mostrarName)
  5.    encontrados.push(datos[i]);
Es una idea ahora faltan los detalles, no se si ese código depurándolo un poco podría funcionar
En cuanto al tuyo me lo estoy trabajando pero de momento me está dando varios errores
  #6 (permalink)  
Antiguo 30/06/2018, 12:08
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Realizar una accion segun los checkbox marcados

Revisame el código porque hay varias cosas que no están bien
Código Javascript:
Ver original
  1. var chk_deportes = document.suscripcion.deportes.checked;
  2.         var chk_noticias = document.suscripcion.noticias.checked;
  3.         var chk_economia = document.suscripcion.economia.checked;
  4.     for(i=0;i<datos.length;i++){       
  5.     deportes = datos[i][0]!= "NO"
  6.              
  7. if(chk_deportes){
  8.    
  9.     datos = datos.filter(deportes) 
  10. }
  11.  
  12. }
  13. console.log(datos);
  14. return datos;
  15. }
  #7 (permalink)  
Antiguo 30/06/2018, 14:13
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Realizar una accion segun los checkbox marcados

esto esta mal
datos = datos.filter(deportes)

Por favor revisa el link que te deje, allí explica el funcionamiento.

En cuanto a tu código, yo lo descartaría, me parece mas practico un filter que un for, aunque para efectos practicos es lo mismo., con un for seria equivalente a esto me parece

Código Javascript:
Ver original
  1. var mi_array=[], resultados = [];
  2.  
  3. if(condicional){
  4.     for(...){
  5.         if(...){
  6.             resultados.push(...);
  7.         }
  8.     }
  9. }
  10.  
  11. if(condicional){
  12.     var resultados2 = [];
  13.     for(resultados ...){
  14.         if(...){
  15.             resultados2.push(...);
  16.         }
  17.     }
  18.     resultados = resultados2;
  19. }
  20.  
  21. if(condicional){
  22.     var resultados2 = [];
  23.     for(resultados...){
  24.         if(...){
  25.             resultados2.push(...);
  26.         }
  27.     }
  28.     resultados = resultados2;
  29. }
  #8 (permalink)  
Antiguo 30/06/2018, 17:11
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Realizar una accion segun los checkbox marcados

Seria algo asi
Código Javascript:
Ver original
  1. var mi_array=[], resultados = [];
  2.  
  3. if(condicional){
  4.     for(i=0;i<datos.length;i++){
  5.         if(chk_deportes){
  6.             resultados.push(datos);
  7.         }
  8.     }
  9. }
  10.  
  11. if(condicional){
  12.     var resultados2 = [];
  13.     for(i=0;i<resultados.length;i++){
  14.         if(chk_noticias){
  15.             resultados2.push(datos);
  16.         }
  17.     }
  18.     resultados = resultados2;
  19. }
  20.  
  21. if(condicional){
  22.     var resultados2 = [];
  23.     for(i=0;i<resultados.length;i++){
  24.         if(chk_economia){
  25.             resultados2.push(datos);
  26.         }
  27.     }
  28.     resultados = resultados2;
  29. }
  30. }
Es que es la primera vez que me enfrento al filter y me cuesta y en javascript tengo un nivel básico
  #9 (permalink)  
Antiguo 30/06/2018, 19:31
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Realizar una accion segun los checkbox marcados

Deberás ponerte a repasar el código así mismo darle a prueba y error.... arma un código funcional, y si te marca errores avisa.

El código que te expuse es meramente ilustrativo y para nada funcional a tu caso, termina de completarlo para que puedas hacer las pruebas pertinentes., animo tomate todo el tiempo que necesites.
  #10 (permalink)  
Antiguo 02/07/2018, 02:17
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Realizar una accion segun los checkbox marcados

Ya lo se que es ilustrativo, pero quiero ir por partes, poco a poco, si no, no me entero
Ya tengo los filtros para cada uno de los checkbox, pero para ello he tenido que crear una función para cada uno de ellos y en cada una de estas funciones crear un array, por ser los datos un array de arrays, donde meter los valores del indice correspondiente a ese checkbox [0],[1] o [2] y filtrar luego la búsqueda sobre ese array.
Código Javascript:
Ver original
  1. var chkDeportes = arrayDeportes()
  2. function arrayDeportes() {
  3. var deportes = [];
  4.  
  5. for (var i = 0; i< datos.length; i++) {
  6.     deportes.push(datos[i][0]);
  7. }
  8.     return deportes;
  9. }
  10.  
  11. function buscaDeportes(elemento) { 
  12.     return elemento == "deportes";     
  13. }
  14. filtrarDeportes = chkDeportes.filter(buscaDeportes);
  15. console.log(filtrarDeportes);
  16.  
  17.  
  18. var chkNoticias = arrayNoticias()
  19. function arrayNoticias() {
  20. var noticias = [];
  21.  
  22. for (var i = 0; i< datos.length; i++) {
  23.     noticias.push(datos[i][1]);
  24. }
  25.     return noticias;
  26. }
  27.  
  28. function buscaNoticias(elemento) { 
  29.     return elemento == "noticias";     
  30. }
  31. var filtrarNoticias = chkNoticias.filter(buscaNoticias);
  32. console.log(filtrarNoticias);
  33.  
  34.  
  35. var chkEconomia = arrayEconomia()
  36. function arrayEconomia() {
  37. var economia = [];
  38.  
  39. for (var i = 0; i< datos.length; i++) {
  40.     economia.push(datos[i][2]);
  41. }
  42.     return economia;
  43. }
  44.  
  45. function buscaEconomia(elemento) { 
  46.     return elemento == "economia";     
  47. }
  48. var filtrarEconomia = chkEconomia.filter(buscaEconomia);
  49. console.log(filtrarEconomia);
Los filtros funcionan aunque no me terminan de convencer
  #11 (permalink)  
Antiguo 02/07/2018, 04:55
 
Fecha de Ingreso: mayo-2011
Ubicación: Palma de Mallorca
Mensajes: 108
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: Realizar una accion segun los checkbox marcados

Hola pedromir,

si quieres seguir con esa idea, en vez de realizar una función para cada checkbox, ¿por que no creas una función parametrizada y que todos los checkbox llamen a esa función pasando el parámetro correspondiente?

Por lo que veo, todo el código se repite salvo el número del segundo indice, que cada uno tiene el suyo propio, por lo que yo haría algo así:

Código Javascript:
Ver original
  1. function checkArray(idx) {
  2. var myArray = [];
  3.  
  4. for (var i = 0; i< datos.length; i++) {
  5.     myArray.push(datos[i][idx]);
  6. }
  7.     return myArray;
  8. }
  9.  
  10. var chkDeportes = checkArray(0);
  11. var chkNoticias = checkArray(1);
  12. var chkEconomia = checkArray(2);

Así evitas escribir el mismo código 3 veces. Lo mismo puedes hacer con las funciones de buscar, que por cierto, invocas mal en tu código:


Código Javascript:
Ver original
  1. function buscaDeportes(elemento) {  
  2.     return elemento == "deportes";      
  3. }
Aquí defines la función con un parámetro

Código Javascript:
Ver original
  1. filtrarDeportes = chkDeportes.filter(buscaDeportes);
Luego invocas la función en esta línea pero, ¿donde le pasas el parámetro?

Revisa ese punto y nos comentas tus avances. Un saludo.
  #12 (permalink)  
Antiguo 02/07/2018, 12:57
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Realizar una accion segun los checkbox marcados

Hola tonigomila1988 y muchas gracias por echarme una mano, ahora me parece que la función si está correcta, como puedes ver mi nivel es muy básico, voy aprendiendo poquito a poco, ya he modificado la función y ahora si, me parece que ya está correcta, he puesto sólo 2 funciones, la correspondiente a deportes y a noticias y las he hecho de dos formas distintas
Código Javascript:
Ver original
  1. var elemento = "deportes";
  2.  
  3. function buscaDeportes(value) {  
  4.     return (value == elemento)      
  5. }
  6.  
  7. var filtrarDeportes = chkDeportes.filter(buscaDeportes, elemento);
  8. console.log(filtrarDeportes);
  9.  
  10. elemento2 = "noticias"
  11. var filtrarNoticias = chkNoticias.filter(
  12.     function (value) {
  13.         return (value == elemento2);
  14.     }
  15. );
  16.  
  17. console.log(filtrarNoticias);
Una vez que he conseguido que me haga la búsqueda según una condición, ahora lo que necesito es que me filtre los resultados según varias condiciones, que me busque por ejemplo la palabra deportes y la palabra noticias y que me muestre los resultados que cumplan ambas condiciones, seria algo así
Código Javascript:
Ver original
  1. var consulta = checkArray.filter(function () {  
  2.    return chkDeportes == 'deportes' && chkNoticias == 'noticias';
  3. });
  4. console.log(consulta);

Última edición por pedromir; 12/07/2018 a las 09:25

Etiquetas: button, checkbox, funcion, input, valor
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 20:56.