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 originalfunction busqueda(){
var cadena=txtBuscar.value.toLowerCase();
var cadenaPro = listaProv.options[listaProv.selectedIndex].value.toLowerCase();
var cadenaCat = listaCat.options[listaCat.selectedIndex].value.toLowerCase();
var cadenaSubCat1 = listaSubCat1.options[listaSubCat1.selectedIndex].value.toLowerCase();
var cadenaSubCat2 = listaSubCat2.options[listaSubCat2.selectedIndex].value.toLowerCase();
var n = datos.length;
nombre = [];
for (var i=0;i<n;i++)
{
var datosProvincia = datos[i][8].toLowerCase().indexOf(cadenaPro)>=0;
var datosCategoria = datos[i][0].toLowerCase().indexOf(cadenaCat)>=0;
var datosSubCat1 = datos[i][1].toLowerCase().indexOf(cadenaSubCat1)>=0;
var datosSubCat2 = datos[i][2].toLowerCase().indexOf(cadenaSubCat2)>=0;
buscaren = reemplazaAcentos(datos[i][3])
txtBuscado = reemplazaAcentos(cadena)
if (txtBuscar.value == textoBusqueda){
if ( cadenaPro !=0 && cadenaCat ==0 && cadenaSubCat1 ==0 )
if (datosProvincia && datosCategoria)
{
nombre.push(datos[i]);
}
if ( cadenaPro !=0 && cadenaCat !=0 && cadenaSubCat1 ==0 )
if (datosCategoria && datosProvincia)
{
nombre.push(datos[i]);
}
if ( cadenaPro ==0 && cadenaCat !=0 && cadenaSubCat1 ==0 )
if (datosCategoria)
{
nombre.push(datos[i]);
}
if ( cadenaPro !=0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 ==0 )
if (datosSubCat1 && datosProvincia)
{
nombre.push(datos[i]);
}
if ( cadenaPro ==0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 ==0 )
if (datosSubCat1)
{
nombre.push(datos[i]);
}
if ( cadenaPro !=0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 !=0)
if (datosSubCat2 && datosProvincia)
{
nombre.push(datos[i]);
}
if ( cadenaPro ==0 && cadenaCat !=0 && cadenaSubCat1 !=0 && cadenaSubCat2 !=0)
if (datosSubCat2)
{
nombre.push(datos[i]);
}
}else if (buscaren.toLowerCase().indexOf(txtBuscado)>=0 && datosProvincia && datosCategoria && datosSubCat1 && datosSubCat2)
{
nombre.push(datos[i]);
}
}
txtResultados.innerHTML=nombre.length;
mostrarResultados(0);
}
Código HTML:
Ver original
<select name="despleCategorias" id="despleCategorias" onChange="cambia_subCat1()" >
<select name="despleSubCat1" id="despleSubCat1" onChange="cambia_subCat2()" size="1">
<select name="despleSubCat2" id="despleSubCat2" size="1">
<select id="despleProvincias">