hola, pueden ayudarme a mejorar este script:
cuando en una caja de texto escribo esto "h" ,hago una busqueda por todos los items cuyo nombre empieza por esa letra, atravez del AJAX a mi BD de MySQL y me devuele un array, ese array lo devuelvo a Javascript gracias a JSON, y el resultado lo muestro en un select:
Código HTML:
<select id="items" >
<option>htp barniz</option>
<option>hidroxido</option>
<option>htp pinturas color verde</option>
<option>htp pinturas color rojo</option>
<option>hexano</option>
<option>he sellador</option>
<option>htp pinturas color azul</option>
</select>
ahora cada vez que sigo escribiendo por ejemplo "he" me debe quedar asi:
Código HTML:
<select id="items" >
<option>hexano</option>
<option>he sellador</option>
</select>
y sigo escribiendo "hex" me debe quedar asi:
Código HTML:
<select id="items" >
<option>hexano</option>
</select>
eso ya lo logre ya que como ya tenia a los items que queria dentro del select
simplemente elimine a los que no coincidian
Código PHP:
//select donde estan los elementos
var sele=document.getElementById('lista_items');
//caja de texto donde escribo
var x=document.getElementById('arti').value;
var tv=x.toUpperCase();
var item_name;
var item_name2;
///para leer todas los option y saber si deben ser eliminados
for (var pss=sele.length-1;pss>=0;pss--)
{
item_name=sele.options[pss].text.substr(0,tv.length);
//tambien lo convierto a mayusculas
item_name=item_name.toUpperCase();
///como ya tengo a los productos, solo busco
a los que no empiezan
//por la letra especifica
if (item_name!=tv)
{
sele.remove(pss);
}
}
Y asi me quedo solo con los que necesito.
Esta alli todo bien, ya que no es necesario hacer denuevo una consulta SQL y no sobrecargo el servidor, pero en vez de seguir escribiendo voy borrando, quedando asi: "he"
el select de nuevo me queda asi
Código HTML:
<select id="items" >
<option>hexano</option>
<option>he sellador</option>
</select>
y si borro la "e" quedando la "h" me quedaria de nuevo asi:
Código HTML:
<select id="items" >
<option>htp barniz</option>
<option>hidroxido</option>
<option>htp pinturas color verde</option>
<option>htp pinturas color rojo</option>
<option>hexano</option>
<option>he sellador</option>
<option>htp pinturas color azul</option>
</select>
Eso tambien lo logre de esta manera:
Código PHP:
//Primero borro a todos los elementos
var sel=document.getElementById('lista_items');
for (var ps=sel.length-1;ps>=0;ps--)
{
sel.remove(ps);
}
//ahora voy creando los options con los items que necesito
// "aglobal" es una variable global que tiene a todos los items
encontrados en la primera busqueda.
for (var q2=aglobal.length-1;q2>=0;q2--)
{
var item_nomb=aglobal[q2].item_nomb.substr(0,tv.length);
item_nomb=item_nomb.toUpperCase();
///para volver a poner solo los que coincidan con las letras
if (item_nomb==tv)
{
var op2=document.createElement('<option>');
var nom2=document.createTextNode(item_nomb);
sel.appendChild(op2);
op2.appendChild(nom2);
/concateno el codigo, nombre y precio porque luego los voy a separar
///para utilizarlos
op2.setAttribute('value',aglobal[q2].item_nomb+'@'+aglobal[q2].item_pvt1+'@'+aglobal[q2].item_codi);
}
}
Como dije con esto ya logre y todo va OK,pero eso de borrar todos los elementos y volver a poner los que pertenecen pues lo hace un poco lento y estaba pensando en la forma de guardar los elementos eliminados en una array, para luego cuando los necesite ponerlos.Pero aun no hallo la logica.
solo voy logrando esto:
Código PHP:
items_eli.push(sele.options[pss].value);
con esto voy guardando los elementos antes de eliminarlos
Pero me falta un poco para hallar toda la logica
pueden ayudarme?
Es que necesito que la busqueda sea los mas rapido posible ya que en ese select tendre muchos elementos