Ver Mensaje Individual
  #14 (permalink)  
Antiguo 19/04/2010, 14:37
Avatar de Adler
Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: Problema con ASP y Ajax

Hola

Ten paciencia, hay mas cosas aparte de esto

Se podría optimizar, pero ya me canse

Código Javascript:
Ver original
  1. <STYLE TYPE="text/css">
  2. #contenedorOpt div.seleccionado {font-weight:bold; background:#F0F0F0; color:#FF6600;}
  3. #contenedorOpt div.deseleccionado {background:#FFFFFF; color:#000000;}
  4. #contenedorOpt div {font:11px verdana; color:#000000; cursor:pointer; text-align:left; padding:2px 5px;}
  5.  
  6. .capa {
  7. background: #FFFFFF;
  8. border:1px solid rgb(120,120,120);
  9. width: 144px;
  10. _width: 146px;
  11. text-align: left;
  12. position: absolute;
  13. }
  14. </STYLE>
  15. <script type="text/javascript">
  16. var ns4 = (document.layers)? true:false
  17. var ie4 = (document.all)? true:false
  18. var ns6 = (document.getElementById)? true:false
  19. var TxtId = '';
  20.  
  21. var SelUsuario = {
  22.  
  23. captura_objeto : function(idnombre) {
  24.     if (ns6) {
  25.         return document.getElementById(idnombre);
  26.     }else if (ie4){
  27.         return document.all[idnombre];
  28.     }else if (ns4){
  29.         return document.layers[idnombre];
  30.     }else{
  31.         return null;
  32.     }
  33. },
  34.  
  35.  
  36. Evento: function (elemento,nomevento,funcion) {
  37.     if (elemento.attachEvent) {
  38.             var f=function() {
  39.                 funcion.call(elemento,window.event);
  40.             }
  41.             elemento.attachEvent('on'+nomevento,f);
  42.             return true;
  43.     } else if (elemento.addEventListener) {
  44.             elemento.addEventListener(nomevento,funcion,false);
  45.             return true;
  46.         }else{
  47.             return false;
  48.     }
  49. },
  50.  
  51.  
  52. creaAjax: function (){
  53. var ajaxs = ["Msxml2.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLH TTP.5.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];
  54. var ajax = false;
  55.     for(var i=0 ; !ajax && i<ajaxs.length ; i++){
  56.         try{
  57.             ajax = new ActiveXObject(ajaxs[i]);   // Internet Explorer
  58.         }
  59.         catch(e) {
  60.             ajax = false;
  61.         }
  62.     }
  63.     if(!ajax && typeof XMLHttpRequest!='undefined') {
  64.         ajax = new XMLHttpRequest();  // Firefox, Opera 8.0+, Safari
  65.     }
  66.     return ajax;
  67. },
  68.  
  69.  
  70. init: function(){
  71. var tablas = document.body.getElementsByTagName('table');
  72.     for (i=0; i < tablas.length; i++) {
  73.         var inpt = tablas[i].getElementsByTagName('input');
  74.                 SelUsuario.Evento(SelUsuario.captura_objeto(inpt[2].id), 'keyup', SelUsuario.Empieza);
  75.                 SelUsuario.Evento(SelUsuario.captura_objeto('contenedorOpt'), 'mouseover', SelUsuario.Seleccionar);
  76.             SelUsuario.Evento(SelUsuario.captura_objeto(inpt[2].id), 'keydown', SelUsuario.Pegar2);
  77.                 SelUsuario.Evento(SelUsuario.captura_objeto(inpt[2].id), 'blur', SelUsuario.Cerrar);
  78.     }
  79. },
  80.  
  81.  
  82.  
  83. PosicionAbsolutaElemento: function(elTxtBox)  {
  84.     if (typeof elTxtBox == "string")
  85.         var elTxtBox = SelUsuario.captura_objeto(elTxtBox);
  86.             if (!elTxtBox) return { top:0,left:0 };
  87.         var y = 0;
  88.         var x = 0;
  89.             while (elTxtBox.offsetParent) {
  90.                     x += elTxtBox.offsetLeft;
  91.                     y += elTxtBox.offsetTop;
  92.                 elTxtBox = elTxtBox.offsetParent;
  93.             }
  94.         return {top:y,left:x};
  95.  
  96. },
  97.  
  98.  
  99. Desplieaga: function(posLeft,posTop) {
  100. var elDiv = SelUsuario.captura_objeto('contenedorOpt');
  101.     elDiv.style.left = posLeft+'px';
  102.     elDiv.style.top = parseInt(posTop+21) +'px';
  103.             elDiv.style.display = 'block';
  104.     elDiv.style.zIndex = 100;
  105. },
  106.  
  107.  
  108. Empieza: function (ev) {
  109. TxtId = SelUsuario.captura_objeto(this.id).id;
  110. var elTxtBox = SelUsuario.captura_objeto(this.id);
  111. var str = elTxtBox.value;
  112. var elDiv = SelUsuario.captura_objeto('contenedorOpt');
  113. var opt = elDiv.getElementsByTagName('DIV');
  114. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  115.  
  116.     if (keyCode == 40) {
  117.         SelUsuario.BajaOpt ('contenedorOpt')
  118.     }else if (keyCode == 38) {
  119.         SelUsuario.SubeOpt ('contenedorOpt')
  120.     }else if (keyCode == 13) {
  121.  
  122.         for (var i = 0; i <= opt.length-1; i++) {
  123.  
  124.             if (opt[i].className == "seleccionado") {
  125.                 str = opt[i].id;
  126.                 if (elDiv.style.display == "block"); elDiv.style.display= "none";
  127.         break;
  128.                 }
  129.             }
  130.  
  131.         try{ // DOM;
  132.             ev.preventDefault();
  133.         }catch(e){ // iexplore;
  134.             ev.returnValue = false;
  135.         }
  136.     } else {
  137.  
  138.         if (str.length < 2) {
  139.             if (elDiv.style.display == "none")  elDiv.style.display= "none";
  140.                     else elDiv.style.display= "none";  
  141.             return;
  142.         }
  143.         ajax = SelUsuario.creaAjax()
  144.  
  145.         if (ajax==null) {
  146.             alert ("Tu navegador no soporta Ajax");
  147.             return;
  148.         }
  149.  
  150. var url="SelecUsuarios.php?q="+escape(str);
  151. ajax.open("GET",url,true);
  152. ajax.onreadystatechange = function () {
  153. var PosElemento = SelUsuario.PosicionAbsolutaElemento(elTxtBox);
  154. var posicionInicialLeft = parseInt(PosElemento.left);
  155. var posicionInicialTop = parseInt(PosElemento.top);
  156.  
  157.         if (ajax.readyState==1 || ajax.readyState==2 || ajax.readyState==3) {
  158.                                         elDiv.innerHTML = "<p align='center'><img src='precarga.gif' border='0px' widht='15px' height='15px'/></p>";
  159.             elDiv.style.display= "block";
  160.  
  161.                 }else if (ajax.readyState==4) {
  162.             if (ajax.status==200) {
  163.                 elDiv.innerHTML = unescape(ajax.responseText);
  164.             }else {
  165.                                         elDiv.innerHTML = "<p>Se ha producido un error</p>";
  166.             }
  167.  
  168.         if (elDiv.style.display == "none")  elDiv.style.display= "block";
  169.         }
  170.     SelUsuario.Desplieaga(posicionInicialLeft, posicionInicialTop);
  171.     }
  172.             ajax.send(null);
  173.             return
  174. }
  175. },
  176.  
  177.  
  178. Seleccionar: function () {
  179. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  180.     for (var i = 0; i < opt.length; i++) {
  181.         SelUsuario.Evento(opt[i], 'click', function() {SelUsuario.Pegar(this.id);})  
  182.         SelUsuario.Evento(opt[i], 'mouseover',  function() {SelUsuario.Marcar(this.id);})
  183.     }
  184. },
  185.  
  186.  
  187.  
  188. Pegar: function (valor) {
  189. var elDiv = SelUsuario.captura_objeto('contenedorOpt')
  190.     SelUsuario.captura_objeto(TxtId).value = valor;
  191.             if (elDiv.style.display == "block"); elDiv.style.display= "none";      
  192. },
  193.  
  194.  
  195.  
  196. Marcar: function (valor) {
  197. var selecionado = SelUsuario.captura_objeto(valor);
  198. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  199.     for (var i = 0; i < opt.length; i++) {
  200.         if (opt[i].className == "seleccionado") {
  201.             opt[i].className = "deseleccionado";
  202.             selecionado.className = "seleccionado";
  203.     break;
  204.         }
  205.     }
  206. },
  207.  
  208.  
  209. Pegar2: function (ev) {
  210. var elDiv = SelUsuario.captura_objeto('contenedorOpt')
  211. var opt = elDiv.getElementsByTagName('DIV');
  212. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  213.  
  214.     if ((keyCode == 13) || (keyCode == 9)) {
  215.         for (var i = 0; i <= opt.length-1; i++) {
  216.             if (opt[i].className == "seleccionado") {
  217.                 SelUsuario.captura_objeto(this.id).value = opt[i].id;
  218.                 if (elDiv.style.display == "block"); elDiv.style.display= "none";
  219.                     break;
  220.             }
  221.         }
  222.  
  223.         if (keyCode == 13) {
  224.             try{ // DOM;
  225.                 ev.preventDefault();
  226.             }catch(e){ // iexplore;
  227.                 ev.returnValue = false;
  228.             }
  229.         }
  230.     }  
  231. },
  232.  
  233.  
  234.  
  235. BajaOpt: function() {
  236. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  237.     for (var i = 0; i <= opt.length-1; i++) {
  238.         if (opt[i].className == "seleccionado") {
  239.             opt[i].className = "deseleccionado";
  240.             if (i < opt.length-1){
  241.                 i++;
  242.             }else{
  243.                 i = 0;
  244.             }
  245.             opt[i].className = "seleccionado"
  246.         }
  247.     }
  248. },
  249.  
  250.  
  251. SubeOpt: function() {
  252. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  253.     for (var i = 0; i <= opt.length-1; i++) {
  254.         if (opt[i].className == "seleccionado") {
  255.             opt[i].className = "deseleccionado";
  256.             if (i < opt.length && i > 0){
  257.                 i--;
  258.             }else{
  259.                 i = opt.length-1;
  260.             }
  261.             opt[i].className = "seleccionado"
  262.         }
  263.     }
  264. },
  265.  
  266.  
  267. Cerrar: function () {
  268. setTimeout("var elDiv = SelUsuario.captura_objeto('contenedorOpt'); if (elDiv.style.display == 'block'); elDiv.style.display= 'none';", 1000);
  269. }
  270.  
  271. }
  272. SelUsuario.Evento(window, 'load', SelUsuario.init);
  273. </script>

En el HTML tendrás que hacer algunos cambios, nada de importancia, te los marco

Cita:
<form method="post" action="">

<table width="351" border="1" align="center" bordercolor="#0000FF" id="idt_1">
<tr>
<td>Sel</td>
<td width="36">Csr:</td>
<td width="70">Modelo:</td>
<td width="47">Serie:</td>
<td width="170">Comentarios:</td>
</tr>
<tr>
<td width="21"><input type="checkbox" name="cod" value="" tabindex="1" ></td>
<td height="55"><input type="text" name="csr" readonly="readonly" size="3" value="2345" tabindex="2"></td>
<td>Nombre Usuario: <input type="text" name="txt" id="txt1" value="" autocomplete="off" tabindex="3"></td>
<td><input type="text" name="serie" tabindex="4"></td>
<td><textarea name="comentarios" cols="30" rows="3" wrap="VIRTUAL" tabindex="5"></textarea></td>
</tr>
</table>

<table width="351" border="1" align="center" bordercolor="#0000FF" id="idt_2">
<tr>
<td>Sel</td>
<td width="36">Csr:</td>
<td width="70">Modelo:</td>
<td width="47">Serie:</td>
<td width="170">Comentarios:</td>
</tr>
<tr>
<td width="21"><input type="checkbox" name="cod" value="" tabindex="1" ></td>
<td height="55"><input type="text" name="csr" readonly="readonly" size="3" value="2345" tabindex="2"></td>
<td>Nombre Usuario: <input type="text" name="txt" id="txt2" value="" autocomplete="off" tabindex="3"></td>
<td><input type="text" name="serie" tabindex="4"></td>
<td><textarea name="comentarios" cols="30" rows="3" wrap="VIRTUAL" tabindex="5"></textarea></td>
</tr>
</table>

<div id="contenedorOpt" class="capa" style="display:none;"></div>
</form>
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />