Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2018, 05:22
pedromir
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Realizar busquedas en un array según elemento seleccionado

Hola a tod@s
Empezaré diciendo que mi nivel de javascript es bastante básico y tengo el siguiente problema, he hecho un array y un formulario con distintos elementos y necesito hacer
búsquedas en el array según los elementos del formulario que tenga rellenados y/o seleccionados, para ello tengo una función donde recorro el formulario y meto en una variable los id de los elementos que tienen datos o están marcados y estos id luego los paso a otra función donde realizo la búsqueda según los valores recibidos, pues no me funciona la búsqueda y no se por qué
Este es el formulario
Código HTML:
Ver original
  1. <form name='formu1' id='formu1'>
  2. <label>Nombre: </label><input type="text" name="nombre" id="nombre">
  3. <label>Apellido: </label><input type="text" name="apellido" id="apellido"><br /><br />
  4.      <label>Ciudad: </label><select name="ciudad" id="ciudad">
  5.             <option value="">Elija opción</option>
  6.             <option value="madrid">Madrid (ES)</option>
  7.             <option value="sevilla">Sevilla (ES)</option>
  8.             <option value="toledo">Toledo (ES)</option>
  9.         </select><br /><br />
  10.       <label>Preferencias: </label><label><input name="Libros" type="checkbox" id="libros" value="libros" />Libros</label>
  11.       <label><input name="Peliculas" type="checkbox" id="peliculas" value="peliculas" />Películas</label>      
  12.       <label><input name="Deportes" type="checkbox" id="deportes" value="deportes" />Deportes</label><br /><br />
  13. </form>
  14. <input type="button" onclick="busqueda();" name="procesar" value="procesar"><br />
Esta es la función con la que extraigo los id de los distintos elementos
Código Javascript:
Ver original
  1. var datos = new Array();
  2. datos =[["Jose","Naranjo","Madrid","libros","peliculas","NO"],
  3. ["Jose","Perez","Sevilla","libros","NO","deportes"],
  4. ["Antonio","Garcia","Toledo","NO","peliculas","NO"],
  5. ["Antonio","Moreno","Toledo","libros","peliculas","deportes"]];
  6.  
  7. function elementosForm() {
  8. var mostrarId = "";
  9.  
  10. var los_elementos = document.getElementById('formu1').elements;
  11. for (i=0; i<los_elementos.length; i++) {
  12.     if(los_elementos[i].value == ''){
  13.         mostrarId += '';               
  14.     }else{
  15.         if((los_elementos[i].type == 'radio')||(los_elementos[i].type == 'checkbox')){
  16.             if(los_elementos[i].checked == true){                                  
  17.                 mostrarId += los_elementos[i].id +' && ';                          
  18.             }else{
  19.                 mostrarId += '';                               
  20.             }
  21.         }else{
  22.             mostrarId += los_elementos[i].id +' && ';                  
  23.         }
  24. }
  25. }
  26. alert(mostrarId.slice(0,-4));
  27.  
  28. return mostrarId.slice(0,-4)
  29. }
Y esta es la función con la que realizo las búsquedas
Código Javascript:
Ver original
  1. function busqueda(){
  2.  
  3.     var txtNombre = document.getElementById("nombre").value;   
  4.     var txtApellido = document.getElementById("apellido").value;   
  5.     var ciudades = document.getElementById("ciudad");
  6.     var buscarCiudad = ciudades.options[ciudades.selectedIndex].value; 
  7.     var buscarLibros = document.getElementById("libros").value;
  8.     var buscarPelis = document.getElementById("peliculas").value;
  9.     var buscarDeportes = document.getElementById("deportes").value;
  10.  
  11.     var n = datos.length;  
  12.     buscarNombre = [];
  13.    
  14.     for (var j = 0; j < n; j++)
  15.     {
  16.     var nombre = datos[j][0].toLowerCase().indexOf(txtNombre)>=0;  
  17.     var apellido = datos[j][1].toLowerCase().indexOf(txtApellido)>=0;  
  18.     var ciudad = datos[j][2].toLowerCase().indexOf(buscarCiudad) >=0;
  19.     var libros = datos[j][3].toLowerCase().indexOf(buscarLibros)>=0;
  20.     var pelis = datos[j][4].toLowerCase().indexOf(buscarPelis)>=0;
  21.     var deportes = datos[j][5].toLowerCase().indexOf(buscarDeportes)>=0;
  22.  
  23. var datosBusqueda = elementosForm();
  24. //var datosBusqueda = nombre && apellido && ciudad && libros && pelis && deportes  //si lo pongo de esta manera funciona bien, pero si uso la función no               
  25. if (datosBusqueda){
  26.                 buscarNombre.push(datos[j]);               
  27.         }
  28.        
  29.     }
  30.     alert(buscarNombre)
  31. }
Lo que quiero es que si tengo escrito el nombre sólo, la primera función me pase a la variable datosBusqueda el id: nombre y con este id buscar en el array, en el índice[0] y me muestre las coincidencias, si escribo el nombre y el apellido me pase el valor con los id: nombre && apellido y en este caso me busque en el índice [0] y en el [1] y así sucesivamente con todos los botones, si los datosBusqueda los escribo yo, funciona bien pero si esos datos vienen de la primera función ya no funciona y no se que estoy haciendo mal, tampoco se si realizar las búsquedas utilizando estas funciones es la forma más correcta de hacerlo