Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2008, 13:18
MariaClaudiaSalerno
 
Fecha de Ingreso: marzo-2008
Mensajes: 82
Antigüedad: 17 años
Puntos: 0
Problema con autocompletar con ASP

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") & "&nbsp;::&nbsp;" & rsWords("razon_social") & "</a>"
			Else
				hint = hint & "<br><a href=javascript:selectItem('" & rsWords("ruc") & "','" & varEmpresa & "','" & rsWords("id") & "')>"& rsWords("ruc") &"&nbsp;::&nbsp;"& 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ú