Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/10/2014, 16:25
pedromir
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Realizar busqueda segun seleccion select anidados

Hola, os cuento mi problema, tengo un select independiente (despleProvincias) y otros tres que dependen uno de otro (despleCategorias, despleSubCat1, despleSubCat2) y tengo creada una busqueda para que me busque un elemento según el select que tenga seleccionado, me explico, si tengo seleccionado el select categorías, me buscará el elemento que se corresponda con este select, pero si selecciono una opción del primer select y despliego el segundo, la búsqueda me la tiene que hacer sólo sobre el segundo select y no sobre el primero y si pincho sobre el tercero lo mismo, en el caso de los select dependientes, la búsqueda es siempre sobre el último seleccionado, pero tengo preparada la búsqueda para poder tener seleccionado al mismo tiempo un select dependiente y el de provincias y que me haga
la búsqueda teniendo en cuenta los dos select y en teoría podría también escribir un texto y además tener seleccionados un select dependiente y el de provincias y que me busque el texto en los elementos que coincidan con los dos select, pero esto sólo funciona con el select de provincias con los otros tres no.

Este es el código que he hecho, en él defino todos los posibles estados de todos los select, el primero seleccionado y los demás no, los dos primeros seleccionados y los demas no, etc. y según lo que esté seleccionado hago la búsqueda, pero no termina de funcionar bien y no me convence como ha quedado, pero mis conocimientos en javascript son muy limitados, así que espero me podáis echar una mano a mejorar el código

Código Javascript:
Ver original
  1. function busqueda(){
  2.     var cadena=txtBuscar.value.toLowerCase();
  3.     var cadenaPro = listaProv.options[listaProv.selectedIndex].value.toLowerCase();
  4.     var cadenaCat = listaCat.options[listaCat.selectedIndex].value.toLowerCase();  
  5.     var cadenaSubCat1 = listaSubCat1.options[listaSubCat1.selectedIndex].value.toLowerCase();
  6.     var cadenaSubCat2 = listaSubCat2.options[listaSubCat2.selectedIndex].value.toLowerCase();
  7.                                        
  8.     var n = datos.length;  
  9.     nombre = [];       
  10.     for (var i=0;i<n;i++)  
  11.     {
  12.            
  13.     var datosProvincia = datos[i][8].toLowerCase().indexOf(cadenaPro)>=0;  
  14.     var datosCategoria = datos[i][0].toLowerCase().indexOf(cadenaCat)>=0;
  15.     var datosSubCat1 = datos[i][1].toLowerCase().indexOf(cadenaSubCat1)>=0;
  16.     var datosSubCat2 = datos[i][2].toLowerCase().indexOf(cadenaSubCat2)>=0;
  17.            
  18.     buscaren = reemplazaAcentos(datos[i][3])
  19.     txtBuscado = reemplazaAcentos(cadena)  
  20.  
  21.         if (txtBuscar.value == textoBusqueda){
  22.        
  23.           if ( cadenaPro !=0 && cadenaCat ==0 && cadenaSubCat1 ==0 )       
  24.             if (datosProvincia && datosCategoria)          
  25.         {
  26.                nombre.push(datos[i]);
  27.         }
  28.        
  29.           if ( cadenaPro !=0 && cadenaCat !=0 && cadenaSubCat1 ==0 )       
  30.             if (datosCategoria && datosProvincia)
  31.         {
  32.                nombre.push(datos[i]);
  33.         }
  34.            
  35.           if ( cadenaPro ==0 && cadenaCat !=0 && cadenaSubCat1 ==0 )       
  36.             if (datosCategoria)        
  37.         {
  38.                nombre.push(datos[i]);
  39.         }
  40.            if ( cadenaPro !=0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 ==0 )     
  41.              if (datosSubCat1 && datosProvincia)                   
  42.         {
  43.                nombre.push(datos[i]);
  44.         }
  45.           if ( cadenaPro ==0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 ==0 )      
  46.             if (datosSubCat1)                          
  47.         {
  48.                nombre.push(datos[i]);
  49.         }
  50.           if ( cadenaPro !=0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 !=0)       
  51.             if (datosSubCat2 && datosProvincia)                
  52.         {
  53.                nombre.push(datos[i]);
  54.         }
  55.        
  56.          if ( cadenaPro ==0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 !=0)    
  57.             if (datosSubCat2)                              
  58.         {
  59.                nombre.push(datos[i]);
  60.         }      
  61.    
  62.           }else if (buscaren.toLowerCase().indexOf(txtBuscado)>=0 && datosProvincia && datosCategoria && datosSubCat1  && datosSubCat2)        
  63.         {
  64.             nombre.push(datos[i]);
  65.         }      
  66.     }
  67.     txtResultados.innerHTML=nombre.length;
  68.     mostrarResultados(0);  
  69. }
Código HTML:
Ver original
  1. <form name="AdminForm2">
  2.  
  3. <select name="despleCategorias" id="despleCategorias" onChange="cambia_subCat1()" >
  4.  
  5.  
  6. <select name="despleSubCat1" id="despleSubCat1" onChange="cambia_subCat2()" size="1">
  7.  
  8.  
  9. <select name="despleSubCat2" id="despleSubCat2" size="1">
  10.  
  11.  
  12. </form>
  13.  
  14. <select id="despleProvincias">
  15.      <option></option>  
  16.   </select>