Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/02/2010, 09:56
darkmcloud
 
Fecha de Ingreso: octubre-2007
Mensajes: 191
Antigüedad: 17 años, 1 mes
Puntos: 0
Textbox dependiente con Ajax y ASP

Buenas amigos de foros del web....tengo el siguiente problema que no se como solucionar. Tengo un formulario donde necesito hacer que al escribir en un campo de texto, me despliegue sugerencias leidas desde la BD y de acuerdo a la opcion escogida se rellene automáticamente otro campo, osea por ejemplo voy escribiendo un modelo de producto y al momento de seleccionarlo se rellena el campo de tipo de producto me entienden?

Bueno, junto a Adler en un post anterior logramos (bueno Adler....jejeje) que funcione correctamente el autocompletar pero sigo sin hacer funcionar el relleno del segundo campo.

Este es el formulario:

SelectUsuariosAjax.asp
Código ASP:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html xmlns="http://www.w3.org/1999/xhtml"lang="es" xml:lang="es">
  3. <head>
  4. <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
  5. <STYLE TYPE="text/css">
  6. #contenedor div.seleccionado {font-weight:bold; background:#F0F0F0; color:#black;}
  7. #contenedor div.deseleccionado {background:#FFFFFF; color:#000000;}
  8. #contenedor div{font:11px verdana; color:#000000; cursor:pointer; text-align:left; padding:2px 5px;}
  9.  
  10. .capa {
  11. background: #FFFFFF;
  12. border:1px solid rgb(120,120,120);
  13. width: 150px;
  14. _width: 250px;
  15. text-align: left;
  16. position: absolute;
  17. top: 30px;
  18. _top:38px;
  19. left: 117px;
  20. _left: 119px;
  21. }
  22. </STYLE>
  23. <script type="text/javascript">
  24. var familia = "";
  25. var SelUsuario = {
  26.  
  27. Evento: function (elemento,nomevento,funcion) {
  28.   if (elemento.attachEvent)
  29.   {
  30.       var f=function(){
  31.         funcion.call(elemento,window.event);
  32.     }
  33.     elemento.attachEvent('on'+nomevento,f);
  34.     return true;
  35.   }
  36.   else  
  37.     if (elemento.addEventListener)
  38.     {
  39.       elemento.addEventListener(nomevento,funcion,false);
  40.       return true;
  41.     }
  42.     else
  43.       return false;
  44. },
  45.  
  46. init: function(){
  47. var elem1 = document.getElementById("txt");
  48. var elem2 = document.getElementById("contenedor");
  49.         SelUsuario.Evento(elem1, 'keyup', SelUsuario.Empieza);
  50.         SelUsuario.Evento(elem2, 'mouseover', SelUsuario.Seleccionar);
  51.         SelUsuario.Evento(elem1, 'keydown', SelUsuario.Pegar2);
  52.         SelUsuario.Evento(window, 'click', SelUsuario.Cerrar);
  53.     },
  54.  
  55.  
  56. creaAjax: function (){
  57.     var ajaxs = ["Msxml2.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLH TTP.5.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];
  58.     var ajax = false;
  59.     for(var i=0 ; !ajax && i<ajaxs.length ; i++){
  60.         try{
  61.             ajax = new ActiveXObject(ajaxs[i]);   // Internet Explorer
  62.         }
  63.         catch(e) {
  64.             ajax = false;
  65.         }
  66.     }
  67.     if(!ajax && typeof XMLHttpRequest!='undefined') {
  68.         ajax = new XMLHttpRequest();  // Firefox, Opera 8.0+, Safari
  69.     }
  70.     return ajax;
  71. },
  72.  
  73. Empieza: function (ev) {
  74. var str = document.getElementById(this.id).value;
  75. var obj = document.getElementById("contenedor");
  76. var obj2 = document.getElementById("stock").options[document.getElementById("stock").selectedIndex].value;
  77. var ref = obj.getElementsByTagName('DIV');
  78. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  79.  
  80.  
  81.  if (keyCode == 40) {
  82. //alert("flecha abajo")
  83.     SelUsuario.BajaOpt ()
  84.  } else if (keyCode == 38) {
  85. //alert("flecha arriba")
  86.     SelUsuario.SubeOpt ()
  87.  
  88.  
  89.  
  90.  
  91. } else if (keyCode == 13) {
  92.  
  93. for (var i = 0; i <= ref.length-1; i++) {
  94. if (ref[i].className == "seleccionado") {
  95.  
  96.         document.getElementById("txt").value = ref[i].id;
  97.         if (obj.style.display == "block"); obj.style.display= "none";
  98.         break;
  99.         }
  100.  
  101.     }
  102.  
  103.     try{ // DOM;
  104.         ev.preventDefault();
  105.         }catch(e){ // iexplore;
  106.         ev.returnValue = false;
  107.         }
  108.  
  109. } else {
  110.  
  111.     if (str.length < 2) {
  112.         //obj.innerHTML = "";
  113.         if (obj.style.display == "none")  obj.style.display= "none";
  114.                 else obj.style.display= "none";
  115.         return;
  116.     }
  117.     ajax = SelUsuario.creaAjax()
  118.     if (ajax==null) {
  119.         alert ("Tu navegador no soporta Ajax");
  120.         return;
  121.      }
  122. var url="SelecUsuarios.asp?q="+escape(str) + "&variable=" +escape(obj2);
  123. //var url="SelecUsuarios.asp?variable=" +obj2 + "&q=" +escape(str);
  124.  
  125.     ajax.open("GET",url,true);
  126.     ajax.onreadystatechange = SelUsuario.Despliega;
  127.     //ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  128.             ajax.send(null);
  129.             return
  130. }
  131. },
  132.  
  133.  
  134.  
  135. Despliega: function () {
  136. var obj = document.getElementById("contenedor");
  137.    
  138. if (ajax.readyState==1 || ajax.readyState==2 || ajax.readyState==3) {
  139. obj.innerHTML = "<p align='center'><img src='../images/cargando.gif' border='0px' widht='15px' height='15px'/></p>";
  140.             obj.style.display= "block";
  141.                 }
  142.  
  143.                 else if (ajax.readyState==4) {
  144.             if (ajax.status==200) {
  145.            
  146. var division = unescape(ajax.responseText);
  147. obj.innerHTML = division.split("-")[0];
  148. familia = division.split("-")[1];
  149.            
  150.            
  151.             obj.innerHTML = unescape(ajax.responseText);
  152.  
  153.             }else {
  154.              obj.innerHTML = "<p>Se ha producido un error</p>";
  155.             }
  156.  
  157.         if (obj.style.display == "none")  obj.style.display= "block";
  158.         }
  159. },
  160.  
  161.  
  162.  
  163. Seleccionar: function () {
  164. var ref = document.getElementById(this.id).getElementsByTagName('DIV');
  165. //alert(ref);
  166. for (var i = 0; i < ref.length; i++) {
  167.  
  168. SelUsuario.Evento(ref[i], 'click', function() {
  169. SelUsuario.Pegar(this.id, familia);
  170. //alert(this.id);
  171. })  
  172.  
  173.  
  174. SelUsuario.Evento(ref[i], 'mouseover',  function() {
  175. SelUsuario.Marcar(this.id);
  176. })
  177.  
  178. //SelUsuario.Evento(ref[i], 'mouseout',  function() {
  179. //SelUsuario.DesMarcar(this.id);
  180. //})
  181. }
  182. },
  183.  
  184. Pegar: function (valor, f) {
  185. //alert("el val " +valor);
  186. var obj = document.getElementById("contenedor")
  187. document.getElementById("txt").value = valor;
  188. document.getElementById("fam").value = f;
  189.                 if (obj.style.display == "block"); obj.style.display= "none";      
  190. },
  191.  
  192.  
  193. Pegar2: function (ev) {
  194. var obj = document.getElementById("contenedor")
  195. var ref = obj.getElementsByTagName('DIV');
  196. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  197.  
  198. // enter 13 tab 9
  199. if ((keyCode == 13) || (keyCode == 9)) {
  200. //alert("enter")
  201.  
  202. for (var i = 0; i <= ref.length-1; i++) {
  203. if (ref[i].className == "seleccionado") {
  204.  
  205.         document.getElementById("txt").value = ref[i].id;
  206.         //window.focus();
  207.         if (obj.style.display == "block"); obj.style.display= "none";
  208. break;
  209. //alert(ref[i].id);
  210.  
  211.  
  212. }
  213. }
  214.  
  215. if (keyCode == 13) {
  216.     try{ // DOM;
  217.         ev.preventDefault();
  218.         }catch(e){ // iexplore;
  219.         ev.returnValue = false;
  220.         }
  221. }
  222.  
  223.  
  224. }  
  225. },
  226.  
  227.  
  228. BajaOpt: function() {
  229. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  230. for (var i = 0; i <= ref.length-1; i++) {
  231. if (ref[i].className == "seleccionado") {
  232. ref[i].className = "deseleccionado";
  233. if (i < ref.length-1){
  234. i++;
  235. }else{
  236. i = 0;
  237. }
  238. //alert("Largo: " +(ref.length-1)+ " Valor: " +i);
  239. ref[i].className = "seleccionado"
  240. }
  241. }
  242. },
  243.  
  244.  
  245. SubeOpt: function() {
  246. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  247. for (var i = 0; i <= ref.length-1; i++) {
  248. if (ref[i].className == "seleccionado") {
  249. ref[i].className = "deseleccionado";
  250. if (i < ref.length && i > 0){
  251. i--;
  252. }else{
  253. i = ref.length-1;
  254. }
  255. //alert("Largo: " +(ref.length-1)+ " Valor: " +i);
  256. ref[i].className = "seleccionado"
  257. }
  258. }
  259. },
  260.  
  261.  
  262.  
  263. Marcar: function (id) {
  264. var selecionado = document.getElementById(id);
  265. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  266. for (var i = 0; i <= ref.length-1; i++) {
  267. if (ref[i].id != id) {
  268. ref[i].className = "deseleccionado";
  269. selecionado.className = "seleccionado";
  270. }
  271. }
  272. },
  273.  
  274. //DesMarcar: function (id) {
  275. //var ref = document.getElementById(id);
  276. //alert(ref);
  277. //ref.className = "deseleccionado"
  278. //alert("el " +id);        
  279. //},
  280.  
  281.  
  282. Cerrar: function () {  
  283. var obj = document.getElementById("contenedor")
  284.             if (obj.style.display == "block"); obj.style.display= "none";  
  285.    
  286. }
  287. }
  288.  
  289. SelUsuario.Evento(window, 'load', SelUsuario.init);
  290. </script>
  291. </head>
  292. <body>
  293. <form method="post" action="">
  294. Nombre Usuario: <input name="txt" type="text" id="txt" tabindex="1" value="" size="40" autocomplete="off" />
  295. <div class="vink" style="margin:5px 0px 0px 10px">
  296. <div id="contenedor" class="capa" style="display:none;"></div></div>
  297. Filtrar: <select id="stock" name="stock">
  298. <option value="constock" selected>Solo con Stock</option>
  299. <option value="sinstock">Sin Stock</option>
  300. </select><br>
  301. <div class="vink" style="margin:5px 0px 0px 10px">
  302. <div id="campo" class="capa" style="display:none;"></div></div>
  303. Familia: <input type="text" name="fam" id="fam" /><br />
  304. <input type="submit" value="Enviar">
  305. </form>
  306. </body>
  307. </html>