Buenas tardes:
Encontré este código navegando por ahí y me resultó muy pero muy bueno, SIN EMBARGO tiene un pequeño pero que no logro solucionar: una vez seleccionado el elemento no se puede volver a utilizar al menos que se recargue la página:
PARTE DEL FORMULARIO QUE LO INVOCA
Código:
<input type="text" name="user_ruc" id="txt1" size="11" maxlength="11" onKeyUp="showHint(this.value)" onKeyPress="return acceptNum(event)" class="texto_amarillo">
<span id="txtHint" style="position:absolute; left:200px; top:70px; background-color:white; margin:5px; float:left;"></span>
GETHINT.JS
Código:
var xmlHttp
function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url="gethint.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4)
{document.getElementById("txtHint").innerHTML=xmlHttp.responseText;}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}
catch (e)
{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}
}
return xmlHttp;
}
function selectItem(ruc,empresa,id)
{
document.getElementById("txt1").value=ruc;
document.getElementById("txtHint").style.display="none";
document.registros.user_cuenta_1.value=id;
var str=empresa;
var cliente=str.replace(/_/g," ");
document.registros.nombre.value=cliente;
document.registros.ruc.value=ruc;
}
GETHINT.ASP
Código:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
response.expires=-1
Dim rsWords
Dim rsWords_numRows
Dim q
Dim hint
q=ucase(request.querystring("q"))
hint=""
Set rsWords = Server.CreateObject("ADODB.Recordset")
rsWords.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=f:\inetpub\base de datos\planilla.mdb"
rsWords.Source = "Select * From Clientes Where (RUC Like'" + q + "%') Order By Razon_Social"
rsWords.CursorType = 2
rsWords.CursorLocation = 2
rsWords.LockType = 3
rsWords.Open()
rsWords_numRows = 0
If Not rsWords.EOF Then
Do While Not rsWords.EOF
varEmpresa=Replace(Server.HTMLEncode(rsWords("razon_social"))," ","_")
If trim(hint) = "" Then
hint = "<a href=javascript:selectItem('" & rsWords("ruc") & "','" & varEmpresa & "','" & rsWords("id") & "')>" & rsWords("ruc") & " :: " & rsWords("razon_social") & "</a>"
Else
hint = hint & "<br><a href=javascript:selectItem('" & rsWords("ruc") & "','" & varEmpresa & "','" & rsWords("id") & "')>"& rsWords("ruc") &" :: "& rsWords("razon_social") &"</a>"
End If
rsWords.MoveNext()
Loop
End If
if trim(hint)="" then
response.write("no suggestion")
else
response.write(hint)
end if
rsWords.Close()
Set rsWords = Nothing
%>
La cuestión es que funciona bien para escoger el elemento que deseo, inclusive mientras estoy ingresando números (sólo permite ingresar números en el campo del formulario pero eso no interfiere) va cambiando el desplegado de autocompletar. Inclusive si borro todo y empiezo de nuevo normal.
La cosa va cuando selecciono un elemento. Se ejecuta normal, pero si luego borro el campo user_ruc y empiezo a ingresar números, simplemente nada pasa.
Encontré otro que no tiene este problema, pero al momento de adicionarlo a mi proyecto (que tiene varias funciones javascript por cierto) algo debe de interferir supongo, porque me arroja un error que corresponde al archivo js de Ajax de este último ejemplo que encontré. Este es más simple (el otro es un poquitín más complicado creo) pero me gustaría utilizar este porque ya logré que funcione bien salvo el detalle que menciono.
Si alguien me puede ayudar le quedaré muy agradecida, en verdad necesito de vuestra ayuda.
Un saludo esperanzador y cordial desde el Perú