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:
GETHINT.JS<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>
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:
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.<%@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 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ú